Messages in this thread Patch in this message | | | From | Tao Ma <> | Subject | [PATCH] loop: clear read-only flag in loop_clr_fd. | Date | Sun, 13 Feb 2011 18:58:55 +0800 |
| |
From: Tao Ma <boyu.mt@taobao.com>
In 75f1dc0, we check bdev_read_only() from blkdev_get(). But the loop_clr_fd doesn't clear the read only flag. What cause a error if we changing a loop device from read only to writable.
A simple test to reproduce the error reported by Milan[1]: touch /x1.img losetup -r /dev/loop0 /x1.img losetup -d /dev/loop0 losetup /dev/loop0 /x1.img /dev/loop0: Permission denied
1: http://marc.info/?l=linux-kernel&m=129756258222642&w=2
Reported-by: Milan Broz <mbroz@redhat.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Tao Ma <boyu.mt@taobao.com> --- drivers/block/loop.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 44e18c0..0d24579 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1036,8 +1036,10 @@ static int loop_clr_fd(struct loop_device *lo, struct block_device *bdev) memset(lo->lo_encrypt_key, 0, LO_KEY_SIZE); memset(lo->lo_crypt_name, 0, LO_NAME_SIZE); memset(lo->lo_file_name, 0, LO_NAME_SIZE); - if (bdev) + if (bdev) { + set_device_ro(bdev, 0); invalidate_bdev(bdev); + } set_capacity(lo->lo_disk, 0); loop_sysfs_exit(lo); if (bdev) { -- 1.6.3.GIT
| |