From: Sage Weil Date: Wed, 17 Aug 2011 22:40:47 +0000 (-0700) Subject: mds: avoid explicit passing of projected_xattrs X-Git-Tag: v0.34~65 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d011c62394f87735bc29d6688f0df575ecf824e9;p=ceph.git mds: avoid explicit passing of projected_xattrs 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 --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 7f0fa4785f87..b9a097eeea61 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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)); } diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index 13a85054649f..1808da9a6389 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -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 *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 *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(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)