|
@@ -2070,6 +2070,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
|
|
struct udf_options uopt;
|
|
struct udf_options uopt;
|
|
struct kernel_lb_addr rootdir, fileset;
|
|
struct kernel_lb_addr rootdir, fileset;
|
|
struct udf_sb_info *sbi;
|
|
struct udf_sb_info *sbi;
|
|
|
|
+ bool lvid_open = false;
|
|
|
|
|
|
uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT);
|
|
uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT);
|
|
uopt.uid = INVALID_UID;
|
|
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,
|
|
le16_to_cpu(ts.year), ts.month, ts.day,
|
|
ts.hour, ts.minute, le16_to_cpu(ts.typeAndTimezone));
|
|
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);
|
|
udf_open_lvid(sb);
|
|
|
|
+ lvid_open = true;
|
|
|
|
+ }
|
|
|
|
|
|
/* Assign the root inode */
|
|
/* Assign the root inode */
|
|
/* assign inodes by physical block number */
|
|
/* assign inodes by physical block number */
|
|
@@ -2248,7 +2251,7 @@ parse_options_failure:
|
|
if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
|
|
if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
|
|
unload_nls(sbi->s_nls_map);
|
|
unload_nls(sbi->s_nls_map);
|
|
#endif
|
|
#endif
|
|
- if (!(sb->s_flags & MS_RDONLY))
|
|
|
|
|
|
+ if (lvid_open)
|
|
udf_close_lvid(sb);
|
|
udf_close_lvid(sb);
|
|
brelse(sbi->s_lvid_bh);
|
|
brelse(sbi->s_lvid_bh);
|
|
udf_sb_free_partitions(sb);
|
|
udf_sb_free_partitions(sb);
|