summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2012-11-19 10:43:40 +0800
committerSage Weil <sage@inktank.com>2012-12-01 12:52:22 -0800
commit9bfe540c659e2fcec34aa0a4b981e52f96b14f22 (patch)
tree5562f3cf63fb0b019df83a2b84f726ce8136b6e2
parent8f674899a855f79cfe24f3f820c6cae9820e406a (diff)
downloadceph-9bfe540c659e2fcec34aa0a4b981e52f96b14f22.tar.gz
mds: don't forward client request from MDS
Forwarding client request that was from MDS will trigger assertion in MDS::forward_message_mds(). MDS only send client requests for stray migration/reintegration, so it's safe to drop them. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--src/mds/MDCache.cc16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc
index 5f0ba16defd..399156ec837 100644
--- a/src/mds/MDCache.cc
+++ b/src/mds/MDCache.cc
@@ -7476,13 +7476,17 @@ void MDCache::request_finish(MDRequest *mdr)
void MDCache::request_forward(MDRequest *mdr, int who, int port)
{
- dout(7) << "request_forward " << *mdr << " to mds." << who << " req " << *mdr << dendl;
-
- mds->forward_message_mds(mdr->client_request, who);
- mdr->client_request = 0;
+ if (mdr->client_request->get_source().is_client()) {
+ dout(7) << "request_forward " << *mdr << " to mds." << who << " req "
+ << *mdr->client_request << dendl;
+ mds->forward_message_mds(mdr->client_request, who);
+ mdr->client_request = 0;
+ if (mds->logger) mds->logger->inc(l_mds_fw);
+ } else {
+ dout(7) << "request_forward drop " << *mdr << " req " << *mdr->client_request
+ << " was from mds" << dendl;
+ }
request_cleanup(mdr);
-
- if (mds->logger) mds->logger->inc(l_mds_fw);
}