loop: fix LO_FLAGS_PARTSCAN hang
authorOmar Sandoval <osandov@fb.com>
Wed, 1 Mar 2017 18:42:38 +0000 (10:42 -0800)
committerJens Axboe <axboe@fb.com>
Thu, 2 Mar 2017 15:56:59 +0000 (08:56 -0700)
commite02898b423802b1f3a3aaa7f16e896da069ba8f7
treeaed54baf3504745565fd0d0d09785ed3c796014b
parent302ad8cc09339ea261eef58a8d5f4a116a8ffda5
loop: fix LO_FLAGS_PARTSCAN hang

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>
Cc: stable@vger.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>
drivers/block/loop.c