diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/block/blkpg.c | 2 | ||||
| -rw-r--r-- | drivers/block/ll_rw_blk.c | 7 | ||||
| -rw-r--r-- | drivers/block/loop.c | 2 |
3 files changed, 8 insertions, 3 deletions
diff --git a/drivers/block/blkpg.c b/drivers/block/blkpg.c index d4826ab849f8..37e244777963 100644 --- a/drivers/block/blkpg.c +++ b/drivers/block/blkpg.c @@ -236,7 +236,7 @@ int blk_ioctl(struct block_device *bdev, unsigned int cmd, unsigned long arg) set_device_ro(dev, intval); return 0; case BLKROGET: - intval = (is_read_only(dev) != 0); + intval = (bdev_read_only(bdev) != 0); return put_user(intval, (int *)(arg)); case BLKRASET: diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index f499db21deed..0f00a8c163af 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -1196,6 +1196,11 @@ int is_read_only(kdev_t dev) return ro_bits[major][minor >> 5] & (1 << (minor & 31)); } +int bdev_read_only(struct block_device *bdev) +{ + return bdev && is_read_only(to_kdev_t(bdev->bd_dev)); +} + void set_device_ro(kdev_t dev,int flag) { int minor,major; @@ -1765,7 +1770,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bhs[]) } } - if ((rw & WRITE) && is_read_only(to_kdev_t(bhs[0]->b_bdev->bd_dev))) { + if ((rw & WRITE) && bdev_read_only(bhs[0]->b_bdev)) { printk(KERN_NOTICE "Can't write to read-only device %s\n", bdevname(bhs[0]->b_bdev)); goto sorry; diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 66df618d318b..69f8d07aa54d 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -679,7 +679,7 @@ static int loop_set_fd(struct loop_device *lo, struct file *lo_file, get_file(file); - if (IS_RDONLY (inode) || is_read_only(to_kdev_t(lo_device->bd_dev)) + if (IS_RDONLY (inode) || bdev_read_only(lo_device) || !(lo_file->f_mode & FMODE_WRITE)) lo_flags |= LO_FLAGS_READ_ONLY; |
