Messages in this thread Patch in this message | | | Date | Mon, 14 Feb 2011 12:47:48 +0100 | From | Milan Broz <> | Subject | Re: [PATCH] loop: clear read-only flag in loop_clr_fd. |
| |
On 02/14/2011 11:30 AM, Tejun Heo wrote: > Umm... This was reported some time ago and patches were already > posted. Milan, can you test whether the following two patches fix the > problems you're seeing? Jens, what's the status of these patches? > > http://thread.gmane.org/gmane.linux.kernel/1090211/focus=1090666 > With patch below (loop cannot be built as module) it fixes the loop problem.
But it doesn't fix the read-only snapshot issue and I guess there will be the same problem with read-only MD code too. (so the 2) issue here https://lkml.org/lkml/2011/2/12/209).
If the call is changed intentionally, we have to fix unconditional blkdev open calls with read-write flag in this code. Before doing that I would like to know if it was intentional change or not...
You can simple try this reproducer (works on older kernel, second readonly snapshot create fails now with permission denied) + dmsetup create x --readonly --table '0 131072 snapshot /dev/loop0 /dev/loop1 p 8' device-mapper: reload ioctl failed: Permission denied
#!/bin/bash -x modprobe loop
dd if=/dev/zero of=/x.img bs=1M count=64 dd if=/dev/zero of=/xs.img bs=1M count=64 losetup /dev/loop0 /x.img losetup /dev/loop1 /xs.img sync dmsetup create x --table "0 131072 snapshot /dev/loop0 /dev/loop1 p 8" udevadm settle dmsetup remove x
losetup -d /dev/loop0 losetup -d /dev/loop1 losetup -r /dev/loop0 /x.img losetup -r /dev/loop1 /xs.img dmsetup create x --readonly --table "0 131072 snapshot /dev/loop0 /dev/loop1 p 8" dmsetup table
dmsetup remove x losetup -d /dev/loop0 losetup -d /dev/loop1
Milan
-- Export bdgrap to allow loop module build
Signed-off-by: Milan Broz <mbroz@redhat.com> diff --git a/fs/block_dev.c b/fs/block_dev.c index 333a7bb..c9cf9f7 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -574,6 +574,7 @@ struct block_device *bdgrab(struct block_device *bdev) ihold(bdev->bd_inode); return bdev; } +EXPORT_SYMBOL(bdgrab); long nr_blockdev_pages(void) {
| |