loop: Avoid circular locking dependency between loop_ctl_mutex and bd_mutex
authorJan Kara <jack@suse.cz>
Thu, 8 Nov 2018 13:01:15 +0000 (14:01 +0100)
committerJens Axboe <axboe@kernel.dk>
Thu, 8 Nov 2018 13:30:36 +0000 (06:30 -0700)
commit1dded9acf6dc9a34cd27fcf8815507e4e65b3c4f
treea9da4d5ac7be64d7bcf83e1e66425672ec1d9b7e
parent0da03cab87e6323ff2e05b14bc7d5c6fcc531efd
loop: Avoid circular locking dependency between loop_ctl_mutex and bd_mutex

Code in loop_change_fd() drops reference to the old file (and also the
new file in a failure case) under loop_ctl_mutex. Similarly to a
situation in loop_set_fd() this can create a circular locking dependency
if this was the last reference holding the file open. Delay dropping of
the file reference until we have released loop_ctl_mutex.

Reported-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c