]> Pileus Git - ~andy/linux/blobdiff - fs/udf/partition.c
Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
[~andy/linux] / fs / udf / partition.c
index a71090ea0e07034c5eb24cdcb8bbea0009ccb8a9..d6caf01a20971e2e3237e885aa55f9ccd9998569 100644 (file)
@@ -33,8 +33,8 @@ uint32_t udf_get_pblock(struct super_block *sb, uint32_t block,
        struct udf_sb_info *sbi = UDF_SB(sb);
        struct udf_part_map *map;
        if (partition >= sbi->s_partitions) {
-               udf_debug("block=%d, partition=%d, offset=%d: "
-                         "invalid partition\n", block, partition, offset);
+               udf_debug("block=%d, partition=%d, offset=%d: invalid partition\n",
+                         block, partition, offset);
                return 0xFFFFFFFF;
        }
        map = &sbi->s_partmaps[partition];
@@ -60,8 +60,8 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
        vdata = &map->s_type_specific.s_virtual;
 
        if (block > vdata->s_num_entries) {
-               udf_debug("Trying to access block beyond end of VAT "
-                         "(%d max %d)\n", block, vdata->s_num_entries);
+               udf_debug("Trying to access block beyond end of VAT (%d max %d)\n",
+                         block, vdata->s_num_entries);
                return 0xFFFFFFFF;
        }
 
@@ -321,9 +321,14 @@ uint32_t udf_get_pblock_meta25(struct super_block *sb, uint32_t block,
        /* We shouldn't mount such media... */
        BUG_ON(!inode);
        retblk = udf_try_read_meta(inode, block, partition, offset);
-       if (retblk == 0xFFFFFFFF) {
-               udf_warning(sb, __func__, "error reading from METADATA, "
-                       "trying to read from MIRROR");
+       if (retblk == 0xFFFFFFFF && mdata->s_metadata_fe) {
+               udf_warn(sb, "error reading from METADATA, trying to read from MIRROR\n");
+               if (!(mdata->s_flags & MF_MIRROR_FE_LOADED)) {
+                       mdata->s_mirror_fe = udf_find_metadata_inode_efe(sb,
+                               mdata->s_mirror_file_loc, map->s_partition_num);
+                       mdata->s_flags |= MF_MIRROR_FE_LOADED;
+               }
+
                inode = mdata->s_mirror_fe;
                if (!inode)
                        return 0xFFFFFFFF;