diff options
| author | Alexander Viro <viro@math.psu.edu> | 2002-06-11 00:55:28 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-06-11 00:55:28 -0700 |
| commit | b83c1ac7e97f62ec480ab4604bcd64ff40b14cba (patch) | |
| tree | c85619194cf71b3c14f49d9b56dd23ab11e28f0e | |
| parent | 23f2ac44d5f9da6e04be21d56596400318d9e7ad (diff) | |
[PATCH] (4/14) resync
added bdev_read_only() - analog of is_read_only() using block_device.
Almost all callers of is_read_only() converted.
| -rw-r--r-- | Documentation/filesystems/porting | 7 | ||||
| -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 | ||||
| -rw-r--r-- | fs/bio.c | 2 | ||||
| -rw-r--r-- | fs/ext3/super.c | 2 | ||||
| -rw-r--r-- | fs/reiserfs/journal.c | 4 | ||||
| -rw-r--r-- | fs/reiserfs/super.c | 2 | ||||
| -rw-r--r-- | fs/super.c | 4 | ||||
| -rw-r--r-- | include/linux/fs.h | 1 | ||||
| -rw-r--r-- | kernel/ksyms.c | 1 | ||||
| -rw-r--r-- | mm/filemap.c | 2 |
12 files changed, 25 insertions, 11 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index 21df13be1a5b..ef49709ee8ad 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting @@ -221,3 +221,10 @@ anything from oops to silent memory corruption. FS_NOMOUNT is gone. If you use it - just set MS_NOUSER in flags (see rootfs for one kind of solution and bdev/socket/pipe for another). + +--- +[recommended] + + Use bdev_read_only(bdev) instead of is_read_only(kdev). The latter +is still alive, but only because of the mess in drivers/s390/block/dasd.c. +As soon as it gets fixed is_read_only() will die. 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; @@ -344,7 +344,7 @@ void ll_rw_kio(int rw, struct kiobuf *kio, struct block_device *bdev, sector_t s kdev_t dev = to_kdev_t(bdev->bd_dev); err = 0; - if ((rw & WRITE) && is_read_only(dev)) { + if ((rw & WRITE) && bdev_read_only(bdev)) { printk("ll_rw_bio: WRITE to ro device %s\n", kdevname(dev)); err = -EPERM; goto out; diff --git a/fs/ext3/super.c b/fs/ext3/super.c index f97881afe88e..6e166d31137b 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c @@ -1400,7 +1400,7 @@ static int ext3_load_journal(struct super_block * sb, int err = 0; int really_read_only; - really_read_only = is_read_only(sb->s_dev); + really_read_only = bdev_read_only(sb->s_bdev); /* * Are we loading a blank journal or performing recovery after a diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index a5a6eae9c08b..4e17d24847fd 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c @@ -1707,7 +1707,7 @@ static int journal_read(struct super_block *p_s_sb) { goto start_log_replay; } - if (continue_replay && is_read_only(p_s_sb->s_dev)) { + if (continue_replay && bdev_read_only(p_s_sb->s_bdev)) { printk("clm-2076: device is readonly, unable to replay log\n") ; return -1 ; } @@ -1796,7 +1796,7 @@ start_log_replay: printk("reiserfs: replayed %d transactions in %lu seconds\n", replay_count, CURRENT_TIME - start) ; } - if (!is_read_only(p_s_sb->s_dev) && + if (!bdev_read_only(p_s_sb->s_bdev) && _update_journal_header_block(p_s_sb, SB_JOURNAL(p_s_sb)->j_start, SB_JOURNAL(p_s_sb)->j_last_flush_trans_id)) { diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index 2418fb115f0f..f2a77f2b67de 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c @@ -1063,7 +1063,7 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) if (replay_only (s)) goto error; - if (is_read_only(s->s_dev) && !(s->s_flags & MS_RDONLY)) { + if (bdev_read_only(s->s_bdev) && !(s->s_flags & MS_RDONLY)) { printk("clm-7000: Detected readonly device, marking FS readonly\n") ; s->s_flags |= MS_RDONLY ; } diff --git a/fs/super.c b/fs/super.c index 7501ae45e19a..7f7251f10ac7 100644 --- a/fs/super.c +++ b/fs/super.c @@ -367,7 +367,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data) { int retval; - if (!(flags & MS_RDONLY) && !kdev_none(sb->s_dev) && is_read_only(sb->s_dev)) + if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev)) return -EACCES; /*flags |= MS_RDONLY;*/ if (flags & MS_RDONLY) @@ -485,7 +485,7 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type, goto out; check_disk_change(dev); error = -EACCES; - if (!(flags & MS_RDONLY) && is_read_only(dev)) + if (!(flags & MS_RDONLY) && bdev_read_only(bdev)) goto out1; error = bd_claim(bdev, fs_type); if (error) diff --git a/include/linux/fs.h b/include/linux/fs.h index 57bf3eca6eb9..1ff532ef3ad4 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1220,6 +1220,7 @@ extern int submit_bh(int, struct buffer_head *); struct bio; extern int submit_bio(int, struct bio *); extern int is_read_only(kdev_t); +extern int bdev_read_only(struct block_device *); extern int set_blocksize(struct block_device *, int); extern int sb_set_blocksize(struct super_block *, int); extern int sb_min_blocksize(struct super_block *, int); diff --git a/kernel/ksyms.c b/kernel/ksyms.c index 3946a1916831..f8cb70e15602 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -326,6 +326,7 @@ EXPORT_SYMBOL(tty_std_termios); EXPORT_SYMBOL(blk_size); EXPORT_SYMBOL(blk_dev); EXPORT_SYMBOL(is_read_only); +EXPORT_SYMBOL(bdev_read_only); EXPORT_SYMBOL(set_device_ro); EXPORT_SYMBOL(bmap); EXPORT_SYMBOL(devfs_register_partitions); diff --git a/mm/filemap.c b/mm/filemap.c index a8283c49fcd0..fe2be94af9f9 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2178,7 +2178,7 @@ generic_file_write(struct file *file, const char *buf, if (unlikely(pos + count > inode->i_sb->s_maxbytes)) count = inode->i_sb->s_maxbytes - pos; } else { - if (is_read_only(inode->i_rdev)) { + if (bdev_read_only(inode->i_bdev)) { err = -EPERM; goto out; } |
