udf: Don't modify filesystem for read-only mounts
When read-write mount of a filesystem is requested but we find out we can mount the filesystem only in read-only mode, we still modify LVID in udf_close_lvid(). That is both unnecessary and contrary to expectation that when we fall back to read-only mount we don't modify the filesystem. Make sure we call udf_close_lvid() only if we called udf_open_lvid() so that filesystem gets modified only if we verified we are allowed to write to it. Reported-by: Karel Zak <kzak@redhat.com> Signed-off-by: Jan Kara <jack@suse.com>
This commit is contained in:
parent
72d4d0e489
commit
9181f8bf5a
1 changed files with 5 additions and 2 deletions
|
@ -2070,6 +2070,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
|
|||
struct udf_options uopt;
|
||||
struct kernel_lb_addr rootdir, fileset;
|
||||
struct udf_sb_info *sbi;
|
||||
bool lvid_open = false;
|
||||
|
||||
uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT);
|
||||
uopt.uid = INVALID_UID;
|
||||
|
@ -2216,8 +2217,10 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
|
|||
le16_to_cpu(ts.year), ts.month, ts.day,
|
||||
ts.hour, ts.minute, le16_to_cpu(ts.typeAndTimezone));
|
||||
}
|
||||
if (!(sb->s_flags & MS_RDONLY))
|
||||
if (!(sb->s_flags & MS_RDONLY)) {
|
||||
udf_open_lvid(sb);
|
||||
lvid_open = true;
|
||||
}
|
||||
|
||||
/* Assign the root inode */
|
||||
/* assign inodes by physical block number */
|
||||
|
@ -2248,7 +2251,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
|
|||
if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
|
||||
unload_nls(sbi->s_nls_map);
|
||||
#endif
|
||||
if (!(sb->s_flags & MS_RDONLY))
|
||||
if (lvid_open)
|
||||
udf_close_lvid(sb);
|
||||
brelse(sbi->s_lvid_bh);
|
||||
udf_sb_free_partitions(sb);
|
||||
|
|
Loading…
Reference in a new issue