[PATCH] fix floppy.c to store correct ro/rw status in underlying gendisk
authorJon Masters <jonathan@jonmasters.org>
Wed, 9 Nov 2005 05:34:43 +0000 (21:34 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 9 Nov 2005 15:55:53 +0000 (07:55 -0800)
Evgeny Stambulchik found that doing the following always worked:

# mount /dev/fd0 /mnt/floppy/
mount: block device /dev/fd0 is write-protected, mounting read-only
# mount -o remount,rw /mnt/floppy
# echo $?
0

This is the case because the block device /dev/fd0 is writeable but the
floppy disk is marked protected.  A fix is to simply have floppy_open mark
the underlying gendisk policy according to reality (since the VFS doesn't
provide a way for do_remount_sb to inquire as to the current device
status).

Signed-off-by: Jon Masters <jcm@jonmasters.org>
Cc: Al Viro <viro@ftp.linux.org.uk>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/block/floppy.c

index 5eadbb9d4d71afdff8d74ae5e5e4f5b00c05a996..dd1935d55424a2d1bc50a164f5a2c60681bf58df 100644 (file)
@@ -3714,6 +3714,12 @@ static int floppy_open(struct inode *inode, struct file *filp)
                USETF(FD_VERIFY);
        }
 
+       /* set underlying gendisk policy to reflect real ro/rw status */
+       if (UTESTF(FD_DISK_WRITABLE))
+               inode->i_bdev->bd_disk->policy = 0;
+       else
+               inode->i_bdev->bd_disk->policy = 1;
+
        if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL)))
                goto out2;