block: loop: fix another reread part failure
authorMing Lei <ming.lei@canonical.com>
Wed, 6 May 2015 04:26:24 +0000 (12:26 +0800)
committerJens Axboe <axboe@fb.com>
Wed, 20 May 2015 15:06:11 +0000 (09:06 -0600)
commit06f0e9e68c0d81c7d822a405f6e35686a711c1fe
treeedeba14fd08414b99402b9b2d94a6faf34f1cded
parentf8933667953e8e61bb6104f5ca88e32e85656a93
block: loop: fix another reread part failure

loop_clr_fd() can be run piggyback with lo_release(), and
under this situation, reread partition may always fail because
bd_mutex has been held already.

This patch detects the situation by the reference count, and
call __blkdev_reread_part() to avoid acquiring the lock again.

In the meantime, this patch switches to new kernel APIs
of blkdev_reread_part() and __blkdev_reread_part().

Reviewed-by: Christoph Hellwig <hch@lst.de>
Tested-by: Jarod Wilson <jarod@redhat.com>
Acked-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/loop.c