]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: remove nestedlock
authorSage Weil <sage@newdream.net>
Sun, 25 May 2008 22:13:30 +0000 (15:13 -0700)
committerSage Weil <sage@newdream.net>
Sun, 25 May 2008 22:13:30 +0000 (15:13 -0700)
src/include/ceph_fs.h
src/mds/CInode.cc
src/mds/CInode.h
src/mds/Locker.cc
src/mds/LogSegment.h
src/mds/Server.cc
src/mds/SimpleLock.h
src/mds/journal.cc

index dd9a35f9aea798c7106602ef67f9067beba2014f..74b75d3fd4e4573742904f73fc8149a284f629a4 100644 (file)
@@ -417,7 +417,6 @@ struct ceph_mds_getmap {
 #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 */
@@ -437,8 +436,6 @@ struct ceph_mds_getmap {
 #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
index b62dca4f25a8abd0e52961a6849bf82a754f69ff..cb85ee26aafd741492f0e9f29733e886cfd03d48 100644 (file)
@@ -642,10 +642,6 @@ void CInode::clear_dirty_scattered(int type)
     xlist_dirty_dirfrag_dir.remove_myself();
     break;
 
-  case CEPH_LOCK_INESTED:
-    xlist_dirty_dirfrag_nested.remove_myself();
-    break;
-
   default:
     assert(0);
   }
@@ -658,9 +654,8 @@ void CInode::finish_scatter_gather_update(int type)
   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();
index d83dfd53dd92cdb9ba537a1d07b4c3cd816f6b6e..2f5f09f7c4051e0b5b32475ddda63ad87363ce9c 100644 (file)
@@ -210,7 +210,6 @@ protected:
 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:
@@ -244,7 +243,6 @@ public:
     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),
@@ -253,8 +251,7 @@ public:
     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;  
@@ -342,7 +339,6 @@ public:
   FileLock   filelock;
   ScatterLock dirlock;
   SimpleLock xattrlock;
-  ScatterLock nestedlock;
 
   SimpleLock* get_lock(int type) {
     switch (type) {
@@ -352,7 +348,6 @@ public:
     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;
   }
index 104edc5b6396727a6e4835463f90a5a5887d1e13..bd3ed22a55e9881dd886de89d28d49febb954f6e 100644 (file)
@@ -341,7 +341,6 @@ void Locker::eval_gather(SimpleLock *lock)
     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);
@@ -355,7 +354,6 @@ bool Locker::rdlock_start(SimpleLock *lock, MDRequest *mut)
     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);
@@ -369,7 +367,6 @@ void Locker::rdlock_finish(SimpleLock *lock, Mutation *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);
@@ -381,7 +378,6 @@ bool Locker::wrlock_start(SimpleLock *lock, MDRequest *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);
@@ -398,7 +394,6 @@ void Locker::wrlock_finish(SimpleLock *lock, Mutation *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);
@@ -418,7 +413,6 @@ bool Locker::xlock_start(SimpleLock *lock, MDRequest *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);
@@ -434,7 +428,6 @@ void Locker::xlock_finish(SimpleLock *lock, Mutation *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);
@@ -1155,7 +1148,6 @@ int Locker::issue_client_lease(CInode *in, int client,
     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;
@@ -1251,7 +1243,6 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
 
     if (do_parent) {
       assert(mut->wrlocks.count(&pin->dirlock));
-      //assert(mut->wrlocks.count(&pin->nestedlock));
     }
 
     // inode -> dirfrag
@@ -1317,9 +1308,9 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
       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;
     }
 
@@ -1388,7 +1379,6 @@ SimpleLock *Locker::get_lock(int lock_type, MDSCacheObjectInfo &info)
   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) {
@@ -1402,7 +1392,6 @@ SimpleLock *Locker::get_lock(int lock_type, MDSCacheObjectInfo &info)
       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;
       }
     }
 
@@ -1441,7 +1430,6 @@ void Locker::handle_lock(MLock *m)
     
   case CEPH_LOCK_IDFT:
   case CEPH_LOCK_IDIR:
-  case CEPH_LOCK_INESTED:
     handle_scatter_lock((ScatterLock*)lock, m);
     break;
 
index 75d5f6a4f0fed6a7ed9a336fd8a6d0f5e1c6ab83..344c31e1507c07c3406fbb9501d2421dc38a0fc2 100644 (file)
@@ -40,7 +40,6 @@ class LogSegment {
 
   xlist<CInode*>  open_files;
   xlist<CInode*>  dirty_dirfrag_dir;
-  xlist<CInode*>  dirty_dirfrag_nested;
 
   xlist<MDSlaveUpdate*> slave_updates;
 
index d1306c939323c1aed3a12e9a7ba68256174b0617..2925625b2db6ba4ac046b2d94ea1659489bea5f8 100644 (file)
@@ -1420,7 +1420,6 @@ CDentry* Server::rdlock_path_xlock_dentry(MDRequest *mdr, bool okexist, bool mus
   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;
@@ -2214,7 +2213,6 @@ void Server::handle_client_link(MDRequest *mdr)
     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);
@@ -2663,7 +2661,6 @@ void Server::handle_client_unlink(MDRequest *mdr)
     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))
@@ -3107,7 +3104,6 @@ void Server::handle_client_rename(MDRequest *mdr)
     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);
 
@@ -3122,7 +3118,6 @@ void Server::handle_client_rename(MDRequest *mdr)
     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);
 
index bd2fc0061955f54661cbe746af8c21cd37fff27c..6b59852df8d186b12cd1b3d2bccfcd8a4dfa558e 100644 (file)
@@ -29,7 +29,6 @@ inline const char *get_lock_type_name(int t) {
   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;
   }
index 0121cfabda1650c937ab3c66d27b69483525a0c9..23cabaf756692d22e43ae9cafb82abc7e3f3ec5e 100644 (file)
@@ -125,27 +125,6 @@ C_Gather *LogSegment::try_to_expire(MDS *mds)
     }
     //(*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()) {
@@ -318,7 +297,6 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg)
     if (lump.is_dirty()) {
       dir->_mark_dirty(logseg);
       dir->get_inode()->dirlock.set_updated();
-      //dir->get_inode()->nestedlock.set_updated();
     }
 
     if (lump.is_complete())