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:41:45 +0000 (06:41 +0100)
commit8ca25e39ec2d67df1f69f08c1d4ad0d6310a5c5b
tree04a7da30d35164c171c2b490141494549b579f3a
parent50447afd96145b6d3d7aea412da178dce95f1f9b
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