From: Yan, Zheng Date: Wed, 5 Mar 2014 05:00:59 +0000 (+0800) Subject: mds: re-issue caps after importing caps (rename) X-Git-Tag: v0.79~111^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dc54b7b3d03d6e08fe24788e0440c92b85a01fc2;p=ceph.git mds: re-issue caps after importing caps (rename) After importing inode, the issued caps can be less than the caps client wants. So re-issue caps after importing inode. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index dfb44cb45b02..8624da20a818 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -5890,10 +5890,13 @@ void Server::_rename_finish(MDRequest *mdr, CDentry *srcdn, CDentry *destdn, CDe _rename_apply(mdr, srcdn, destdn, straydn); CDentry::linkage_t *destdnl = destdn->get_linkage(); + CInode *in = destdnl->get_inode(); + bool need_eval = mdr->more()->cap_imports.count(in); + // test hack: test slave commit - if (!mdr->more()->slaves.empty() && !destdnl->get_inode()->is_dir()) + if (!mdr->more()->slaves.empty() && !in->is_dir()) assert(g_conf->mds_kill_rename_at != 5); - if (!mdr->more()->slaves.empty() && destdnl->get_inode()->is_dir()) + if (!mdr->more()->slaves.empty() && in->is_dir()) assert(g_conf->mds_kill_rename_at != 6); // commit anchor updates? @@ -5904,9 +5907,8 @@ void Server::_rename_finish(MDRequest *mdr, CDentry *srcdn, CDentry *destdn, CDe // bump popularity mds->balancer->hit_dir(mdr->now, srcdn->get_dir(), META_POP_IWR); - if (destdnl->is_remote() && - destdnl->get_inode()->is_auth()) - mds->balancer->hit_inode(mdr->now, destdnl->get_inode(), META_POP_IWR); + if (destdnl->is_remote() && in->is_auth()) + mds->balancer->hit_inode(mdr->now, in, META_POP_IWR); // did we import srci? if so, explicitly ack that import that, before we unlock and reply. @@ -5915,7 +5917,10 @@ void Server::_rename_finish(MDRequest *mdr, CDentry *srcdn, CDentry *destdn, CDe // reply MClientReply *reply = new MClientReply(mdr->client_request, 0); reply_request(mdr, reply); - + + if (need_eval) + mds->locker->eval(in, CEPH_CAP_LOCKS, true); + // clean up? if (straydn) mdcache->eval_stray(straydn);