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();
}
protected:
fnode_t fnode;
list<fnode_t*> projected_fnode;
+ xlist<CDir*>::item xlist_dirty;
public:
version_t get_version() { return fnode.version; }
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<CDir*>::item xlist_dirty;
// lock nesting, freeze
int auth_pins;
for (list<CInode*>::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);
}
}