aboutsummaryrefslogtreecommitdiffstats
path: root/fs/udf
diff options
context:
space:
mode:
authorSebastian Manciulea <manciuleas@yahoo.com>2008-04-14 11:06:36 -0400
committerJan Kara <jack@suse.cz>2008-04-17 08:29:43 -0400
commit47c9358a015199ed37c66235a2238271a7c8041f (patch)
tree265659628f44c00a65a0deaee6edc137aed6cab1 /fs/udf
parentbfb257a5981af805a9394f00f75d3d9f7b611cc0 (diff)
udf: Fix bug in VAT mapping code
Fix mapping of blocks using VAT when it is stored in an inode. UDF_I(inode)->i_data already points to the beginning of VAT header so there's no need to add udf_ext0_offset(inode). Signed-off-by: Sebastian Manciulea <manciuleas@yahoo.com> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf')
-rw-r--r--fs/udf/partition.c3
-rw-r--r--fs/udf/super.c6
2 files changed, 4 insertions, 5 deletions
diff --git a/fs/udf/partition.c b/fs/udf/partition.c
index 2dfe4be2eeb2..63610f026ae1 100644
--- a/fs/udf/partition.c
+++ b/fs/udf/partition.c
@@ -66,7 +66,8 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
66 } 66 }
67 67
68 if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { 68 if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
69 loc = le32_to_cpu(((__le32 *)iinfo->i_ext.i_data)[block]); 69 loc = le32_to_cpu(((__le32 *)(iinfo->i_ext.i_data +
70 vdata->s_start_offset))[block]);
70 goto translate; 71 goto translate;
71 } 72 }
72 index = (sb->s_blocksize - vdata->s_start_offset) / sizeof(uint32_t); 73 index = (sb->s_blocksize - vdata->s_start_offset) / sizeof(uint32_t);
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 29b19678327a..8f02b30c22ef 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -1215,8 +1215,7 @@ static int udf_load_vat(struct super_block *sb, int p_index, int type1_index)
1215 return 1; 1215 return 1;
1216 1216
1217 if (map->s_partition_type == UDF_VIRTUAL_MAP15) { 1217 if (map->s_partition_type == UDF_VIRTUAL_MAP15) {
1218 map->s_type_specific.s_virtual.s_start_offset = 1218 map->s_type_specific.s_virtual.s_start_offset = 0;
1219 udf_ext0_offset(sbi->s_vat_inode);
1220 map->s_type_specific.s_virtual.s_num_entries = 1219 map->s_type_specific.s_virtual.s_num_entries =
1221 (sbi->s_vat_inode->i_size - 36) >> 2; 1220 (sbi->s_vat_inode->i_size - 36) >> 2;
1222 } else if (map->s_partition_type == UDF_VIRTUAL_MAP20) { 1221 } else if (map->s_partition_type == UDF_VIRTUAL_MAP20) {
@@ -1233,8 +1232,7 @@ static int udf_load_vat(struct super_block *sb, int p_index, int type1_index)
1233 } 1232 }
1234 1233
1235 map->s_type_specific.s_virtual.s_start_offset = 1234 map->s_type_specific.s_virtual.s_start_offset =
1236 le16_to_cpu(vat20->lengthHeader) + 1235 le16_to_cpu(vat20->lengthHeader);
1237 udf_ext0_offset(sbi->s_vat_inode);
1238 map->s_type_specific.s_virtual.s_num_entries = 1236 map->s_type_specific.s_virtual.s_num_entries =
1239 (sbi->s_vat_inode->i_size - 1237 (sbi->s_vat_inode->i_size -
1240 map->s_type_specific.s_virtual. 1238 map->s_type_specific.s_virtual.