diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/osd_client.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c index d14019dd6868..0aea8afaa072 100644 --- a/fs/ceph/osd_client.c +++ b/fs/ceph/osd_client.c | |||
@@ -469,10 +469,15 @@ static void __unregister_request(struct ceph_osd_client *osdc, | |||
469 | rb_erase(&req->r_node, &osdc->requests); | 469 | rb_erase(&req->r_node, &osdc->requests); |
470 | osdc->num_requests--; | 470 | osdc->num_requests--; |
471 | 471 | ||
472 | list_del_init(&req->r_osd_item); | 472 | if (req->r_osd) { |
473 | if (list_empty(&req->r_osd->o_requests)) | 473 | /* make sure the original request isn't in flight. */ |
474 | remove_osd(osdc, req->r_osd); | 474 | ceph_con_revoke(&req->r_osd->o_con, req->r_request); |
475 | req->r_osd = NULL; | 475 | |
476 | list_del_init(&req->r_osd_item); | ||
477 | if (list_empty(&req->r_osd->o_requests)) | ||
478 | remove_osd(osdc, req->r_osd); | ||
479 | req->r_osd = NULL; | ||
480 | } | ||
476 | 481 | ||
477 | ceph_osdc_put_request(req); | 482 | ceph_osdc_put_request(req); |
478 | 483 | ||