aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nilfs2/super.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index 430a508b212f..3ff2118abd7d 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -998,10 +998,14 @@ nilfs_get_sb(struct file_system_type *fs_type, int flags,
998{ 998{
999 struct nilfs_super_data sd; 999 struct nilfs_super_data sd;
1000 struct super_block *s; 1000 struct super_block *s;
1001 fmode_t mode = FMODE_READ;
1001 struct the_nilfs *nilfs; 1002 struct the_nilfs *nilfs;
1002 int err, need_to_close = 1; 1003 int err, need_to_close = 1;
1003 1004
1004 sd.bdev = open_bdev_exclusive(dev_name, flags, fs_type); 1005 if (!(flags & MS_RDONLY))
1006 mode |= FMODE_WRITE;
1007
1008 sd.bdev = open_bdev_exclusive(dev_name, mode, fs_type);
1005 if (IS_ERR(sd.bdev)) 1009 if (IS_ERR(sd.bdev))
1006 return PTR_ERR(sd.bdev); 1010 return PTR_ERR(sd.bdev);
1007 1011
@@ -1082,7 +1086,7 @@ nilfs_get_sb(struct file_system_type *fs_type, int flags,
1082 mutex_unlock(&nilfs->ns_mount_mutex); 1086 mutex_unlock(&nilfs->ns_mount_mutex);
1083 put_nilfs(nilfs); 1087 put_nilfs(nilfs);
1084 if (need_to_close) 1088 if (need_to_close)
1085 close_bdev_exclusive(sd.bdev, flags); 1089 close_bdev_exclusive(sd.bdev, mode);
1086 simple_set_mnt(mnt, s); 1090 simple_set_mnt(mnt, s);
1087 return 0; 1091 return 0;
1088 1092
@@ -1090,7 +1094,7 @@ nilfs_get_sb(struct file_system_type *fs_type, int flags,
1090 mutex_unlock(&nilfs->ns_mount_mutex); 1094 mutex_unlock(&nilfs->ns_mount_mutex);
1091 put_nilfs(nilfs); 1095 put_nilfs(nilfs);
1092 failed: 1096 failed:
1093 close_bdev_exclusive(sd.bdev, flags); 1097 close_bdev_exclusive(sd.bdev, mode);
1094 1098
1095 return err; 1099 return err;
1096 1100