From: Kuan Kai Chiu Date: Thu, 18 Apr 2013 06:43:25 +0000 (+0800) Subject: mds: fix setting/removing xattrs on root X-Git-Tag: v0.61~155 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f379ce37bfdcb3670f52ef47c02787f82e50e612;p=ceph.git mds: fix setting/removing xattrs on root MDS crashes while journaling dirty root inode in handle_client_setxattr and handle_client_removexattr. We should use journal_dirty_inode to safely log root inode here. Signed-off-by: Kuan Kai Chiu Reviewed-by: Greg Farnum --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 11ab834d856f..1e62dd2dfbae 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -3907,8 +3907,7 @@ void Server::handle_client_setxattr(MDRequest *mdr) mdlog->start_entry(le); 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); + mdcache->journal_dirty_inode(mdr, &le->metablob, cur); journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur)); } @@ -3964,8 +3963,7 @@ void Server::handle_client_removexattr(MDRequest *mdr) mdlog->start_entry(le); 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); + mdcache->journal_dirty_inode(mdr, &le->metablob, cur); journal_and_reply(mdr, cur, 0, le, new C_MDS_inode_update_finish(mds, mdr, cur)); }