#define CEPH_LOCK_IDFT 32 /* dir frag tree */
#define CEPH_LOCK_IDIR 64 /* mds internal */
#define CEPH_LOCK_IXATTR 128
-#define CEPH_LOCK_INESTED 256
#define CEPH_LOCK_INO 2048 /* immutable inode bits; not actually a lock */
#define CEPH_LOCK_ICONTENT (CEPH_LOCK_IFILE|CEPH_LOCK_IDIR) /* alias for either filelock or dirlock */
#define CEPH_STAT_MASK_SIZE CEPH_LOCK_ICONTENT
#define CEPH_STAT_MASK_ATIME CEPH_LOCK_ICONTENT /* fixme */
#define CEPH_STAT_MASK_XATTR CEPH_LOCK_IXATTR
-#define CEPH_STAT_MASK_NSIZE CEPH_LOCK_INESTED
-#define CEPH_STAT_MASK_NCTIME CEPH_LOCK_INESTED
#define CEPH_STAT_MASK_INODE_ALL (CEPH_LOCK_ICONTENT|CEPH_LOCK_IAUTH|CEPH_LOCK_ILINK|CEPH_LOCK_INO)
#define CEPH_UTIME_ATIME 1
xlist_dirty_dirfrag_dir.remove_myself();
break;
- case CEPH_LOCK_INESTED:
- xlist_dirty_dirfrag_nested.remove_myself();
- break;
-
default:
assert(0);
}
switch (type) {
case CEPH_LOCK_IDIR:
{
- assert(is_auth());
-
// adjust summation
+ assert(is_auth());
inode.dirstat.version++;
for (map<frag_t,CDir*>::iterator p = dirfrags.begin();
p != dirfrags.end();
public:
xlist<CInode*>::item xlist_open_file;
xlist<CInode*>::item xlist_dirty_dirfrag_dir;
- xlist<CInode*>::item xlist_dirty_dirfrag_nested;
xlist<CInode*>::item xlist_purging_inode;
private:
replica_caps_wanted(0),
xlist_dirty(this), xlist_open_file(this),
xlist_dirty_dirfrag_dir(this),
- xlist_dirty_dirfrag_nested(this),
xlist_purging_inode(this),
auth_pins(0), nested_auth_pins(0),
versionlock(this, CEPH_LOCK_IVERSION, WAIT_VERSIONLOCK_OFFSET),
dirfragtreelock(this, CEPH_LOCK_IDFT, WAIT_DIRFRAGTREELOCK_OFFSET),
filelock(this, CEPH_LOCK_IFILE, WAIT_FILELOCK_OFFSET),
dirlock(this, CEPH_LOCK_IDIR, WAIT_DIRLOCK_OFFSET),
- xattrlock(this, CEPH_LOCK_IXATTR, WAIT_XATTRLOCK_OFFSET),
- nestedlock(this, CEPH_LOCK_INESTED, WAIT_NESTEDLOCK_OFFSET)
+ xattrlock(this, CEPH_LOCK_IXATTR, WAIT_XATTRLOCK_OFFSET)
{
memset(&inode, 0, sizeof(inode));
state = 0;
FileLock filelock;
ScatterLock dirlock;
SimpleLock xattrlock;
- ScatterLock nestedlock;
SimpleLock* get_lock(int type) {
switch (type) {
case CEPH_LOCK_IDFT: return &dirfragtreelock;
case CEPH_LOCK_IDIR: return &dirlock;
case CEPH_LOCK_IXATTR: return &xattrlock;
- case CEPH_LOCK_INESTED: return &nestedlock;
}
return 0;
}
return file_eval_gather((FileLock*)lock);
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
return scatter_eval_gather((ScatterLock*)lock);
default:
return simple_eval_gather(lock);
return file_rdlock_start((FileLock*)lock, mut);
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
return scatter_rdlock_start((ScatterLock*)lock, mut);
default:
return simple_rdlock_start(lock, mut);
return file_rdlock_finish((FileLock*)lock, mut);
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
return scatter_rdlock_finish((ScatterLock*)lock, mut);
default:
return simple_rdlock_finish(lock, mut);
switch (lock->get_type()) {
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
return scatter_wrlock_start((ScatterLock*)lock, mut);
case CEPH_LOCK_IVERSION:
return local_wrlock_start((LocalLock*)lock, mut);
switch (lock->get_type()) {
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
return scatter_wrlock_finish((ScatterLock*)lock, mut);
case CEPH_LOCK_IVERSION:
return local_wrlock_finish((LocalLock*)lock, mut);
return local_xlock_start((LocalLock*)lock, mut);
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
return scatter_xlock_start((ScatterLock*)lock, mut);
default:
return simple_xlock_start(lock, mut);
return local_xlock_finish((LocalLock*)lock, mut);
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
return scatter_xlock_finish((ScatterLock*)lock, mut);
default:
return simple_xlock_finish(lock, mut);
if (in->filelock.can_lease()) mask |= CEPH_LOCK_IFILE;
}
if (in->xattrlock.can_lease()) mask |= CEPH_LOCK_IXATTR;
- //if (in->nestedlock.can_lease()) mask |= CEPH_LOCK_INESTED;
_issue_client_lease(in, mask, pool, client, bl, now, session);
return mask;
if (do_parent) {
assert(mut->wrlocks.count(&pin->dirlock));
- //assert(mut->wrlocks.count(&pin->nestedlock));
}
// inode -> dirfrag
stop = true;
}
if (stop) {
- dout(10) << "predirty_nested stop. marking dirty dirfrag/scatterlock on " << *pin << dendl;
+ dout(10) << "predirty_nested stop. marking dirlock on " << *pin << dendl;
mut->add_updated_scatterlock(&pin->dirlock);
- mut->ls->dirty_dirfrag_nested.push_back(&pin->xlist_dirty_dirfrag_dir);
+ mut->ls->dirty_dirfrag_dir.push_back(&pin->xlist_dirty_dirfrag_dir);
break;
}
case CEPH_LOCK_IFILE:
case CEPH_LOCK_IDIR:
case CEPH_LOCK_IXATTR:
- case CEPH_LOCK_INESTED:
{
CInode *in = mdcache->get_inode(info.ino);
if (!in) {
case CEPH_LOCK_IFILE: return &in->filelock;
case CEPH_LOCK_IDIR: return &in->dirlock;
case CEPH_LOCK_IXATTR: return &in->xattrlock;
- case CEPH_LOCK_INESTED: return &in->nestedlock;
}
}
case CEPH_LOCK_IDFT:
case CEPH_LOCK_IDIR:
- case CEPH_LOCK_INESTED:
handle_scatter_lock((ScatterLock*)lock, m);
break;
xlist<CInode*> open_files;
xlist<CInode*> dirty_dirfrag_dir;
- xlist<CInode*> dirty_dirfrag_nested;
xlist<MDSlaveUpdate*> slave_updates;
else
rdlocks.insert(&dn->lock); // existing dn, rdlock
wrlocks.insert(&dn->dir->inode->dirlock); // also, wrlock on dir mtime
- //wrlocks.insert(&dn->dir->inode->nestedlock); // also, wrlock on dir mtime
if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
return 0;
rdlocks.insert(&linktrace[i]->lock);
xlocks.insert(&dn->lock);
wrlocks.insert(&dn->dir->inode->dirlock);
- //wrlocks.insert(&dn->dir->inode->nestedlock);
for (int i=0; i<(int)targettrace.size(); i++)
rdlocks.insert(&targettrace[i]->lock);
xlocks.insert(&targeti->linklock);
rdlocks.insert(&trace[i]->lock);
xlocks.insert(&dn->lock);
wrlocks.insert(&dn->dir->inode->dirlock);
- //wrlocks.insert(&dn->dir->inode->nestedlock);
xlocks.insert(&in->linklock);
if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
rdlocks.insert(&srctrace[i]->lock);
xlocks.insert(&srcdn->lock);
wrlocks.insert(&srcdn->dir->inode->dirlock);
- //wrlocks.insert(&srcdn->dir->inode->nestedlock);
if (srcdn->is_primary() && srcdn->inode->is_dir())
xlocks.insert(&srcdn->inode->dirlock);
rdlocks.insert(&desttrace[i]->lock);
xlocks.insert(&destdn->lock);
wrlocks.insert(&destdn->dir->inode->dirlock);
- //wrlocks.insert(&destdn->dir->inode->nestedlock);
if (destdn->is_primary() && destdn->inode->is_dir())
xlocks.insert(&destdn->inode->dirlock);
case CEPH_LOCK_IDFT: return "idft";
case CEPH_LOCK_IDIR: return "idir";
case CEPH_LOCK_IXATTR: return "ixattr";
- case CEPH_LOCK_INESTED: return "inested";
case CEPH_LOCK_INO: return "ino";
default: assert(0); return 0;
}
}
//(*p)->dirlock.add_waiter(SimpleLock::WAIT_STABLE, gather->new_sub());
}
- /*
- for (xlist<CInode*>::iterator p = dirty_dirfrag_nested.begin(); !p.end(); ++p) {
- CInode *in = *p;
- dout(10) << "try_to_expire waiting for nestedlock flush on " << *in << dendl;
- if (!gather) gather = new C_Gather;
-
- if (in->is_ambiguous_auth()) {
- dout(10) << " waiting for single auth on " << *in << dendl;
- in->add_waiter(MDSCacheObject::WAIT_SINGLEAUTH, gather->new_sub());
- } else if (in->is_auth()) {
- dout(10) << " i'm auth, unscattering nestedlock on " << *in << dendl;
- assert(in->is_replicated()); // hrm!
- mds->locker->scatter_lock(&in->nestedlock);
- in->nestedlock.add_waiter(SimpleLock::WAIT_STABLE, gather->new_sub());
- } else {
- dout(10) << " i'm a replica, requesting nestedlock unscatter of " << *in << dendl;
- mds->locker->scatter_try_unscatter(&in->nestedlock, gather->new_sub());
- }
- //(*p)->nestedlock.add_waiter(SimpleLock::WAIT_STABLE, gather->new_sub());
- }
- */
// open files
if (!open_files.empty()) {
if (lump.is_dirty()) {
dir->_mark_dirty(logseg);
dir->get_inode()->dirlock.set_updated();
- //dir->get_inode()->nestedlock.set_updated();
}
if (lump.is_complete())