diff options
author | Jon Masters <jonathan@jonmasters.org> | 2005-11-09 00:34:43 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-09 10:55:53 -0500 |
commit | 88baf3e85af72f606363a85e9a60e9e61cc64a6c (patch) | |
tree | 6a887c40f55680b2494c98cd216f3cdafe1768e8 | |
parent | 4448aaf0faafff3f275d15937c28b6346760e028 (diff) |
[PATCH] fix floppy.c to store correct ro/rw status in underlying gendisk
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>
-rw-r--r-- | drivers/block/floppy.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index 5eadbb9d4d71..dd1935d55424 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c | |||
@@ -3714,6 +3714,12 @@ static int floppy_open(struct inode *inode, struct file *filp) | |||
3714 | USETF(FD_VERIFY); | 3714 | USETF(FD_VERIFY); |
3715 | } | 3715 | } |
3716 | 3716 | ||
3717 | /* set underlying gendisk policy to reflect real ro/rw status */ | ||
3718 | if (UTESTF(FD_DISK_WRITABLE)) | ||
3719 | inode->i_bdev->bd_disk->policy = 0; | ||
3720 | else | ||
3721 | inode->i_bdev->bd_disk->policy = 1; | ||
3722 | |||
3717 | if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL))) | 3723 | if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL))) |
3718 | goto out2; | 3724 | goto out2; |
3719 | 3725 | ||