]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/udf/super.c
udf: Don't modify filesystem for read-only mounts
[karo-tx-linux.git] / fs / udf / super.c
index b96f190bc5679bfcc4740d770034352e0c956296..81155b9b445b3313cec45c89533bd1ea8027736e 100644 (file)
@@ -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 @@ parse_options_failure:
        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);