lkml.org 
[lkml]   [2001]   [Jan]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
[1.]

The loop device doesnt seem to reset it's read-only status after it
gets used on a file that is on a read-only filesystem.

[6.]

(Pretty chopped up, but it demonstrates the problem)

# mount
/dev/hda1 on / type reiserfs (rw)
/dev/scd0 on /mnt/cdrom type iso9660 (ro,noexec,nosuid,nodev,sync,unhide)
# list /mnt/cdrom/floppy.img
-r--r--r-- 1 root root 1474560 Dec 16 15:40 /mnt/cdrom/floppy.img
# cp /mnt/cdrom/floppy.img /

# mount -o loop=/dev/loop0 /floppy.img /mnt/disk
# mount
/floppy.img on /mnt/disk type ext2 (rw,loop=/dev/loop0)
# umount /mnt/disk

# mount -o ro,loop=/dev/loop0 /floppy.img /mnt/disk
# mount
/floppy.img on /mnt/disk type ext2 (ro,loop=/dev/loop0)
# umount /mnt/disk

# mount -o rw,loop=/dev/loop0 /floppy.img /mnt/disk
# mount
/floppy.img on /mnt/disk type ext2 (rw,loop=/dev/loop0)
# umount /mnt/disk

(All that above is normal)

# mount -o loop=/dev/loop0 /mnt/cdrom/floppy.img /mnt/disk
# mount
/mnt/cdrom/floppy.img on /mnt/disk type ext2 (ro,loop=/dev/loop0)
# umount /mnt/disk

(Now loop0 is screwed)

# mount -o loop=/dev/loop0 /floppy.img /mnt/disk
mount: floppy.img is write-protected, mounting read-only
# mount
/floppy.img on /mnt/disk type ext2 (ro,loop=/dev/loop0)
# umount /mnt/disk

# mount -o rw,loop=/dev/loop0 /floppy.img /mnt/disk
mount: floppy.img is write-protected, mounting read-only
# mount
/floppy.img on /mnt/disk type ext2 (ro,loop=/dev/loop0)
# umount /mnt/disk

The same behavior as shown above is exhibited by:

losetup /dev/loop1 /mnt/cdrom/floppy.img
losetup -d /dev/loop1

now loop1 thinks it is always read-only.

[7.1.]

Linux dave 2.4.0 #1 i586 unknown
Kernel modules 2.4.0
Gnu C 2.95.2
Gnu Make 3.79.1
Binutils 2.10.1
Linux C Library 2.2
Dynamic linker ldd: version 1.9.9
Procps 2.0.7
Mount 2.10r
Net-tools 1.57
Console-tools 0.2.3
Sh-utils 2.0
Modules Loaded

[X.]

This patch seems to fix the problem on my machine.

--- linux/drivers/block/loop.c.orig Tue Jan 9 12:16:02 2001
+++ linux/drivers/block/loop.c Tue Jan 9 12:16:57 2001
@@ -412,13 +412,14 @@
error = -EINVAL;
inode = file->f_dentry->d_inode;

+ lo->lo_flags = 0;
+
if (S_ISBLK(inode->i_mode)) {
/* dentry will be wired, so... */
error = blkdev_get(inode->i_bdev, file->f_mode,
file->f_flags, BDEV_FILE);

lo->lo_device = inode->i_rdev;
- lo->lo_flags = 0;

/* Backed by a block device - don't need to hold onto
a file structure */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:28    [W:0.032 / U:0.776 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site