OSDN Git Service

loop: fix LO_FLAGS_PARTSCAN hang
authorOmar Sandoval <osandov@fb.com>
Wed, 1 Mar 2017 18:42:38 +0000 (10:42 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 12 Mar 2017 05:37:27 +0000 (06:37 +0100)
commitcd3db55c64ae1ee46c3522d9681e5999f83989d6
tree4ca1033a845725dc47e35b0f22fe53ad15e1cc74
parent356d71df739877f18aa0ce1e0d7cb050d8fe874c
loop: fix LO_FLAGS_PARTSCAN hang

commit e02898b423802b1f3a3aaa7f16e896da069ba8f7 upstream.

loop_reread_partitions() needs to do I/O, but we just froze the queue,
so we end up waiting forever. This can easily be reproduced with losetup
-P. Fix it by moving the reread to after we unfreeze the queue.

Fixes: ecdd09597a57 ("block/loop: fix race between I/O and set_status")
Reported-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/loop.c