]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - drivers/block/floppy.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial
[linux-2.6.git] / drivers / block / floppy.c
index 77cfd6916ff1a4180fbbc64fa420d98265d2a493..13b8a9bed66e03652d29f0a5dd9ae8f92a08069d 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;
 
@@ -3770,8 +3776,7 @@ static int floppy_open(struct inode *inode, struct file *filp)
        /* Allow ioctls if we have write-permissions even if read-only open.
         * Needed so that programs such as fdrawcmd still can work on write
         * protected disks */
-       if (filp->f_mode & 2
-           || permission(filp->f_dentry->d_inode, 2, NULL) == 0)
+       if ((filp->f_mode & FMODE_WRITE) || !file_permission(filp, MAY_WRITE))
                filp->private_data = (void *)8;
 
        if (UFDCS->rawcmd == 1)