summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-06-11 00:55:28 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-06-11 00:55:28 -0700
commitb83c1ac7e97f62ec480ab4604bcd64ff40b14cba (patch)
treec85619194cf71b3c14f49d9b56dd23ab11e28f0e
parent23f2ac44d5f9da6e04be21d56596400318d9e7ad (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/porting7
-rw-r--r--drivers/block/blkpg.c2
-rw-r--r--drivers/block/ll_rw_blk.c7
-rw-r--r--drivers/block/loop.c2
-rw-r--r--fs/bio.c2
-rw-r--r--fs/ext3/super.c2
-rw-r--r--fs/reiserfs/journal.c4
-rw-r--r--fs/reiserfs/super.c2
-rw-r--r--fs/super.c4
-rw-r--r--include/linux/fs.h1
-rw-r--r--kernel/ksyms.c1
-rw-r--r--mm/filemap.c2
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;
diff --git a/fs/bio.c b/fs/bio.c
index 5181ecf38bdc..4b39ebf8676b 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -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;
}