[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1297594735-5593-1-git-send-email-tm@tao.ma>
Date: Sun, 13 Feb 2011 18:58:55 +0800
From: Tao Ma <tm@....ma>
To: linux-kernel@...r.kernel.org
Cc: Jens Axboe <axboe@...nel.dk>, Tejun Heo <tj@...nel.org>
Subject: [PATCH] loop: clear read-only flag in loop_clr_fd.
From: Tao Ma <boyu.mt@...bao.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@...hat.com>
Cc: Tejun Heo <tj@...nel.org>
Signed-off-by: Tao Ma <boyu.mt@...bao.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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists