diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 102d79575895..9dcf8bb60c4e 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -952,6 +952,9 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, error = -EBUSY; if (lo->lo_state != Lo_unbound) goto out_unlock; + /* Avoid changing loop device under an exclusive opener... */ + if (!(mode & FMODE_EXCL) && bdev->bd_holders > 0) + goto out_unlock; error = loop_validate_file(file, bdev); if (error)