]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: auth_pin dir we are projecting in predirty_nested
authorSage Weil <sage@newdream.net>
Thu, 12 Jun 2008 21:23:43 +0000 (14:23 -0700)
committerSage Weil <sage@newdream.net>
Thu, 12 Jun 2008 21:23:43 +0000 (14:23 -0700)
src/TODO
src/mds/Locker.cc

index fd777c55ef7802362fb7a44b6e789a310adf59f4..2176a5bbd87b26ecf20f34744f8d9d565c9f9e86 100644 (file)
--- a/src/TODO
+++ b/src/TODO
@@ -20,6 +20,7 @@ userspace client
 - clean up ll_ interface, now that we have leases!
 - clean up client mds session vs mdsmap behavior?
 - stop using mds's inode_t?
+- fix readdir vs fragment race by keeping a separate frag pos, and ignoring dentries below it
 
 kernel client
 - flush caps on sync, fsync, etc.
@@ -37,6 +38,7 @@ kernel client
  - can we use dentry_path(), if it gets merged into mainline?
 - io / osd client
   - osd ack vs commit handling.  hmm!
+- fix readdir vs fragment race by keeping a separate frag pos, and ignoring dentries below it
 
 client
 - clean up client mds session vs mdsmap behavior?
@@ -62,8 +64,8 @@ mds
 - dir frags
  - fix replay  (dont want dir frozen, pins, etc.?)
  - fix accounting
- - block while acquiring the dft dirlock, since we may need to request a scatter?
  - make sure non-dirty dirs journal/replay properly
+ - client: fix readdir vs fragment race by keeping a separate frag pos, and ignoring dentries below it
 
 - proper handling of cache expire messages during rejoin phase?
   -> i think cache expires are fine; the rejoin_ack handler just has to behave if rejoining items go missing
index 23b1f3ad5b906112ed3b4bcc86b227c6456abc9a..e45dbbc072a4db39055df774310725ae0813415f 100644 (file)
@@ -1312,6 +1312,7 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
     }
 
     // inode -> dirfrag
+    mut->auth_pin(parent);
     mut->add_projected_fnode(parent);
 
     fnode_t *pf = parent->project_fnode();
@@ -1391,9 +1392,9 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
       break;
     }
     local_wrlock_grab(&pin->versionlock, mut);
-    mut->auth_pin(pin);
 
     // dirfrag -> diri
+    mut->auth_pin(pin);
     mut->add_projected_inode(pin);
     lsi.push_back(pin);