]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: avoid explicit passing of projected_xattrs
authorSage Weil <sage@newdream.net>
Wed, 17 Aug 2011 22:40:47 +0000 (15:40 -0700)
committerSage Weil <sage@newdream.net>
Wed, 17 Aug 2011 22:41:06 +0000 (15:41 -0700)
No need to pass this in explicitly; we can look in the projected inode for
it.  This actually fixes a race where a journaled inode following a
setxattr will not journal the projected xattrs.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/Server.cc
src/mds/events/EMetaBlob.h

index 7f0fa4785f872d344ea0af03694e00f66f78ebd4..b9a097eeea61deb348161796fd8806a4d80b178a 100644 (file)
@@ -3400,7 +3400,7 @@ void Server::handle_client_setxattr(MDRequest *mdr)
   le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
   mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
   mdcache->journal_cow_inode(mdr, &le->metablob, cur);
-  le->metablob.add_primary_dentry(cur->get_projected_parent_dn(), true, cur, 0, 0, px);
+  le->metablob.add_primary_dentry(cur->get_projected_parent_dn(), true, cur);
 
   journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
 }
@@ -3449,7 +3449,7 @@ void Server::handle_client_removexattr(MDRequest *mdr)
   le->metablob.add_client_req(req->get_reqid(), req->get_oldest_client_tid());
   mdcache->predirty_journal_parents(mdr, &le->metablob, cur, 0, PREDIRTY_PRIMARY, false);
   mdcache->journal_cow_inode(mdr, &le->metablob, cur);
-  le->metablob.add_primary_dentry(cur->get_projected_parent_dn(), true, cur, 0, 0, px);
+  le->metablob.add_primary_dentry(cur->get_projected_parent_dn(), true, cur);
 
   journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur));
 }
index 13a85054649fc43cc2efceed73008fdedfd73315..1808da9a638970be72a416cf3f846f92cc370fd2 100644 (file)
@@ -532,14 +532,12 @@ private:
 
   // return remote pointer to to-be-journaled inode
   inode_t *add_primary_dentry(CDentry *dn, bool dirty, 
-                             CInode *in=0, fragtree_t *pdft=0, bufferlist *psnapbl=0,
-                             map<string,bufferptr> *px=0) {
+                             CInode *in=0, fragtree_t *pdft=0, bufferlist *psnapbl=0) {
     return add_primary_dentry(add_dir(dn->get_dir(), false),
-                              dn, dirty, in, pdft, psnapbl, px);
+                              dn, dirty, in, pdft, psnapbl);
   }
   inode_t *add_primary_dentry(dirlump& lump, CDentry *dn, bool dirty, 
-                             CInode *in=0, fragtree_t *pdft=0, bufferlist *psnapbl=0,
-                             map<string,bufferptr> *px=0) {
+                             CInode *in=0, fragtree_t *pdft=0, bufferlist *psnapbl=0) {
     if (!in) 
       in = dn->get_projected_linkage()->get_inode();
 
@@ -556,8 +554,6 @@ private:
 
     if (!pdft)
       pdft = &in->dirfragtree;
-    if (!px)
-      px = &in->xattrs;
 
     bufferlist snapbl;
     if (psnapbl) {
@@ -573,7 +569,8 @@ private:
     lump.get_dfull().push_back(std::tr1::shared_ptr<fullbit>(new fullbit(dn->get_name(), 
                                                                         dn->first, dn->last,
                                                                         dn->get_projected_version(), 
-                                                                        *pi, *pdft, *px,
+                                                                        *pi, *pdft,
+                                                                        *in->get_projected_xattrs(),
                                                                         in->symlink, snapbl,
                                                                         dirty, default_layout)));
     if (pi)