ceph: remove request from waiting list before unregister
authorYan, Zheng <zyan@redhat.com>
Fri, 14 Jun 2019 02:55:05 +0000 (10:55 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 8 Jul 2019 12:01:42 +0000 (14:01 +0200)
Link: https://tracker.ceph.com/issues/40339
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/mds_client.c

index fcea46a..598a3fa 100644 (file)
@@ -727,6 +727,7 @@ void ceph_mdsc_release_request(struct kref *kref)
                ceph_pagelist_release(req->r_pagelist);
        put_request_session(req);
        ceph_unreserve_caps(req->r_mdsc, &req->r_caps_reservation);
+       WARN_ON_ONCE(!list_empty(&req->r_wait));
        kfree(req);
 }
 
@@ -4162,6 +4163,7 @@ static void wait_requests(struct ceph_mds_client *mdsc)
                while ((req = __get_oldest_req(mdsc))) {
                        dout("wait_requests timed out on tid %llu\n",
                             req->r_tid);
+                       list_del_init(&req->r_wait);
                        __unregister_request(mdsc, req);
                }
        }