diff options
author | Yan, Zheng <ukernel@gmail.com> | 2014-09-11 14:25:18 +0800 |
---|---|---|
committer | Jiri Slaby <jslaby@suse.cz> | 2015-11-14 18:57:08 +0100 |
commit | 3057240acb6d1cc2f41d27f80f4a35bc85d949ae (patch) | |
tree | e25c8287eafcfe0e5e99a1bb02f6e73f1352c3a7 /fs/ceph | |
parent | fcd082c0640d0f8eef3d0d2a17a62c9446a77cf2 (diff) | |
download | lwn-3057240acb6d1cc2f41d27f80f4a35bc85d949ae.tar.gz lwn-3057240acb6d1cc2f41d27f80f4a35bc85d949ae.zip |
ceph: protect kick_requests() with mdsc->mutex
commit 656e4382948d4b2c81bdaf707f1400f53eff2625 upstream.
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Reviewed-by: Sage Weil <sage@redhat.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Diffstat (limited to 'fs/ceph')
-rw-r--r-- | fs/ceph/mds_client.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index 3e07f82a3c9d..16c7e4ab94f0 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c @@ -2389,9 +2389,8 @@ static void handle_session(struct ceph_mds_session *session, if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) pr_info("mds%d reconnect denied\n", session->s_mds); remove_session_caps(session); - wake = 1; /* for good measure */ + wake = 2; /* for good measure */ wake_up_all(&mdsc->session_close_wq); - kick_requests(mdsc, mds); break; case CEPH_SESSION_STALE: @@ -2417,6 +2416,8 @@ static void handle_session(struct ceph_mds_session *session, if (wake) { mutex_lock(&mdsc->mutex); __wake_requests(mdsc, &session->s_waiting); + if (wake == 2) + kick_requests(mdsc, mds); mutex_unlock(&mdsc->mutex); } return; |