On Fri, 2019-06-14 at 10:59 +0800, Yan, Zheng wrote: > Link: https://tracker.ceph.com/issues/40339 > Signed-off-by: "Yan, Zheng" <zyan@xxxxxxxxxx> > --- > fs/ceph/mds_client.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c > index fda621bc8a29..776c47bd1155 100644 > --- a/fs/ceph/mds_client.c > +++ b/fs/ceph/mds_client.c > @@ -4162,6 +4162,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); > } > } It might also be a good idea to add something like this to ceph_mdsc_release_request: WARN_ON_ONCE(!list_empty(&req->r_wait)) ...ditto for any of the other list_heads that we expect to be empty before freeing. In any case: Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>