ceph: make sure request isn't in any waiting list when kicking request.
authorYan, Zheng <ukernel@gmail.com>
Thu, 11 Sep 2014 06:28:56 +0000 (14:28 +0800)
committerJiri Slaby <jslaby@suse.cz>
Sat, 14 Nov 2015 17:56:56 +0000 (18:56 +0100)
commit 03974e8177b36d672eb59658f976f03cb77c1129 upstream.

we may corrupt waiting list if a request in the waiting list is kicked.

Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Reviewed-by: Sage Weil <sage@redhat.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
fs/ceph/mds_client.c

index 6f1161324f91339b2451bdddb537c4c172cfb228..3e07f82a3c9d105c7798379005ce992ef97d86bf 100644 (file)
@@ -1985,6 +1985,7 @@ static void kick_requests(struct ceph_mds_client *mdsc, int mds)
                if (req->r_session &&
                    req->r_session->s_mds == mds) {
                        dout(" kicking tid %llu\n", req->r_tid);
+                       list_del_init(&req->r_wait);
                        __do_request(mdsc, req);
                }
        }