summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-06-21 14:39:26 +0800
committerSage Weil <sage@inktank.com>2013-06-21 08:19:24 -0700
commit2147c4e3a6d7df960d61ff6f0177ffb472ffb4f5 (patch)
treea4993612df4aeb43f169c1d4fed4b9158bf385ac
parente97a2c86de2dbbf911d86419db5913e6d789cd1f (diff)
downloadceph-2147c4e3a6d7df960d61ff6f0177ffb472ffb4f5.tar.gz
mds: use "open-by-ino" helper to handle LOOKUPINO request
Fixes #3541 Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--src/mds/Server.cc38
-rw-r--r--src/mds/Server.h1
2 files changed, 8 insertions, 31 deletions
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index 1d16d04dc3d..e84626b431a 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -2483,41 +2483,19 @@ void Server::handle_client_lookup_ino(MDRequest *mdr)
void Server::_lookup_ino(MDRequest *mdr)
{
inodeno_t ino = mdr->client_request->get_filepath().get_ino();
- dout(10) << "_lookup_ino " << mdr << " checking peers for ino " << ino << dendl;
- mdcache->find_ino_peers(ino,
- new C_MDS_LookupIno2(this, mdr), -1);
+ dout(10) << "_lookup_ino " << mdr << " opening ino " << ino << dendl;
+ mdcache->open_ino(ino, (int64_t)-1, new C_MDS_LookupIno2(this, mdr), false);
}
-struct C_MDS_LookupIno3 : public Context {
- Server *server;
- MDRequest *mdr;
- C_MDS_LookupIno3(Server *s, MDRequest *r) : server(s), mdr(r) {}
- void finish(int r) {
- server->_lookup_ino_3(mdr, r);
- }
-};
-
void Server::_lookup_ino_2(MDRequest *mdr, int r)
{
inodeno_t ino = mdr->client_request->get_filepath().get_ino();
- dout(10) << "_lookup_ino_2 " << mdr << " checked peers for ino " << ino
- << " and got r=" << r << dendl;
- if (r == 0) {
- dispatch_client_request(mdr);
- return;
- }
-
- // okay fine, maybe it's a directory though...
- mdcache->find_ino_dir(ino, new C_MDS_LookupIno3(this, mdr));
-}
-
-void Server::_lookup_ino_3(MDRequest *mdr, int r)
-{
- inodeno_t ino = mdr->client_request->get_filepath().get_ino();
- dout(10) << "_lookup_ino_3 " << mdr << " checked dir obj for ino " << ino
- << " and got r=" << r << dendl;
- if (r == 0) {
- dispatch_client_request(mdr);
+ dout(10) << "_lookup_ino_2 " << mdr << " ino " << ino << " r=" << r << dendl;
+ if (r >= 0) {
+ if (r == mds->get_nodeid())
+ dispatch_client_request(mdr);
+ else
+ mdcache->request_forward(mdr, r);
return;
}
diff --git a/src/mds/Server.h b/src/mds/Server.h
index 269b286b431..2da40558b3d 100644
--- a/src/mds/Server.h
+++ b/src/mds/Server.h
@@ -146,7 +146,6 @@ public:
void handle_client_lookup_ino(MDRequest *mdr);
void _lookup_ino(MDRequest *mdr);
void _lookup_ino_2(MDRequest *mdr, int r);
- void _lookup_ino_3(MDRequest *mdr, int r);
void handle_client_readdir(MDRequest *mdr);
void handle_client_file_setlock(MDRequest *mdr);
void handle_client_file_readlock(MDRequest *mdr);