summaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
authorYanhu Cao <gmayyyha@gmail.com>2020-07-31 16:25:13 +0800
committerIlya Dryomov <idryomov@gmail.com>2020-08-04 19:41:14 +0200
commit224c7b6778fe08e1880ef88867051bec0a154d6c (patch)
treec8050bd27e2ea9d6c7402af3204113b1dda656ff /fs/ceph
parenta0102bda5bc0991c5c8c7c07770b236894a810fd (diff)
downloadlinux-stable-224c7b6778fe08e1880ef88867051bec0a154d6c.tar.gz
linux-stable-224c7b6778fe08e1880ef88867051bec0a154d6c.tar.bz2
linux-stable-224c7b6778fe08e1880ef88867051bec0a154d6c.zip
ceph: use frag's MDS in either mode
When doing some tests with multiple mds, we were seeing many mds forwarding requests between them, causing clients to resend. If the request is a modification operation and the mode is set to USE_AUTH_MDS, then the auth mds should be selected to handle the request. If auth mds for frag is already set, then it should be returned directly without further processing. The current logic is wrong because it only returns directly if mode is USE_AUTH_MDS, but we want to do that for all modes. If we don't, then when the frag's mds is not equal to cap session's mds, the request will get sent to the wrong MDS needlessly. Drop the mode check in this condition. Signed-off-by: Yanhu Cao <gmayyyha@gmail.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/mds_client.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 590822fab767..1095802ad9bd 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -1103,8 +1103,7 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
frag.frag, mds);
if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >=
CEPH_MDS_STATE_ACTIVE) {
- if (mode == USE_ANY_MDS &&
- !ceph_mdsmap_is_laggy(mdsc->mdsmap,
+ if (!ceph_mdsmap_is_laggy(mdsc->mdsmap,
mds))
goto out;
}