rbd: fix snapshot context reference count for discards
authorJosh Durgin <josh.durgin@inktank.com>
Sat, 5 Apr 2014 00:47:52 +0000 (17:47 -0700)
committerIlya Dryomov <idryomov@redhat.com>
Tue, 14 Oct 2014 17:03:32 +0000 (21:03 +0400)
Discards take a reference to the snapshot context of an image when
they are created.  This reference needs to be cleaned up when the
request is done just as it is for regular writes.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
drivers/block/rbd.c

index 31ace3dd33e46650078d6ecee1b5110a86e74936..de1520ccc0d46afdf5bbfefffa33e83913ce694c 100644 (file)
@@ -2170,7 +2170,8 @@ static void rbd_img_request_destroy(struct kref *kref)
                rbd_dev_parent_put(img_request->rbd_dev);
        }
 
-       if (img_request_write_test(img_request))
+       if (img_request_write_test(img_request) ||
+               img_request_discard_test(img_request))
                ceph_put_snap_context(img_request->snapc);
 
        kmem_cache_free(rbd_img_request_cache, img_request);