From 0363b72d4909fda7783132e3916036b140f375f9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 22 May 2008 21:45:06 -0700 Subject: [PATCH] mds: fix cdir dirtying, for mknod at least --- src/mds/CDir.cc | 2 +- src/mds/CDir.h | 3 +-- src/mds/Server.cc | 10 +++++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index d0243a7778411..6643354322782 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -797,9 +797,9 @@ void CDir::pop_and_dirty_projected_fnode(LogSegment *ls) assert(!projected_fnode.empty()); dout(15) << "pop_and_dirty_projected_fnode " << projected_fnode.front() << " v" << projected_fnode.front()->version << dendl; - _mark_dirty(ls); fnode = *projected_fnode.front(); delete projected_fnode.front(); + _mark_dirty(ls); projected_fnode.pop_front(); } diff --git a/src/mds/CDir.h b/src/mds/CDir.h index 9ede2cbed1096..034d122d27510 100644 --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@ -158,6 +158,7 @@ class CDir : public MDSCacheObject { protected: fnode_t fnode; list projected_fnode; + xlist::item xlist_dirty; public: version_t get_version() { return fnode.version; } @@ -192,13 +193,11 @@ protected: int num_dirty; - // state version_t committing_version; version_t committed_version; version_t committed_version_equivalent; // in case of, e.g., temporary file - xlist::item xlist_dirty; // lock nesting, freeze int auth_pins; diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 8438c2ba8f023..8e8a025e06b12 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -1550,9 +1550,13 @@ void Server::predirty_nested(MDRequest *mdr, EMetaBlob *blob, CInode *in) for (list::iterator p = ls.begin(); p != ls.end(); p++) { - SimpleLock *lock = &(*p)->dirlock; - mdr->wrlocks.insert(lock); - mdr->locks.insert(lock); + ScatterLock *lock = &(*p)->dirlock; + if (mdr->wrlocks.count(lock)) + lock->put_wrlock(); + else { + mdr->wrlocks.insert(lock); + mdr->locks.insert(lock); + } mdr->add_projected_inode(*p); } } -- 2.39.5