diff options
Diffstat (limited to 'fs/udf/namei.c')
-rw-r--r-- | fs/udf/namei.c | 86 |
1 files changed, 45 insertions, 41 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index f84bfaa8d941..6a29fa34c478 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -47,7 +47,7 @@ int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi, | |||
47 | struct fileIdentDesc *sfi, struct udf_fileident_bh *fibh, | 47 | struct fileIdentDesc *sfi, struct udf_fileident_bh *fibh, |
48 | uint8_t *impuse, uint8_t *fileident) | 48 | uint8_t *impuse, uint8_t *fileident) |
49 | { | 49 | { |
50 | uint16_t crclen = fibh->eoffset - fibh->soffset - sizeof(tag); | 50 | uint16_t crclen = fibh->eoffset - fibh->soffset - sizeof(struct tag); |
51 | uint16_t crc; | 51 | uint16_t crc; |
52 | int offset; | 52 | int offset; |
53 | uint16_t liu = le16_to_cpu(cfi->lengthOfImpUse); | 53 | uint16_t liu = le16_to_cpu(cfi->lengthOfImpUse); |
@@ -99,18 +99,18 @@ int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi, | |||
99 | memset(fibh->ebh->b_data, 0x00, padlen + offset); | 99 | memset(fibh->ebh->b_data, 0x00, padlen + offset); |
100 | } | 100 | } |
101 | 101 | ||
102 | crc = crc_itu_t(0, (uint8_t *)cfi + sizeof(tag), | 102 | crc = crc_itu_t(0, (uint8_t *)cfi + sizeof(struct tag), |
103 | sizeof(struct fileIdentDesc) - sizeof(tag)); | 103 | sizeof(struct fileIdentDesc) - sizeof(struct tag)); |
104 | 104 | ||
105 | if (fibh->sbh == fibh->ebh) { | 105 | if (fibh->sbh == fibh->ebh) { |
106 | crc = crc_itu_t(crc, (uint8_t *)sfi->impUse, | 106 | crc = crc_itu_t(crc, (uint8_t *)sfi->impUse, |
107 | crclen + sizeof(tag) - | 107 | crclen + sizeof(struct tag) - |
108 | sizeof(struct fileIdentDesc)); | 108 | sizeof(struct fileIdentDesc)); |
109 | } else if (sizeof(struct fileIdentDesc) >= -fibh->soffset) { | 109 | } else if (sizeof(struct fileIdentDesc) >= -fibh->soffset) { |
110 | crc = crc_itu_t(crc, fibh->ebh->b_data + | 110 | crc = crc_itu_t(crc, fibh->ebh->b_data + |
111 | sizeof(struct fileIdentDesc) + | 111 | sizeof(struct fileIdentDesc) + |
112 | fibh->soffset, | 112 | fibh->soffset, |
113 | crclen + sizeof(tag) - | 113 | crclen + sizeof(struct tag) - |
114 | sizeof(struct fileIdentDesc)); | 114 | sizeof(struct fileIdentDesc)); |
115 | } else { | 115 | } else { |
116 | crc = crc_itu_t(crc, (uint8_t *)sfi->impUse, | 116 | crc = crc_itu_t(crc, (uint8_t *)sfi->impUse, |
@@ -154,7 +154,7 @@ static struct fileIdentDesc *udf_find_entry(struct inode *dir, | |||
154 | uint8_t lfi; | 154 | uint8_t lfi; |
155 | uint16_t liu; | 155 | uint16_t liu; |
156 | loff_t size; | 156 | loff_t size; |
157 | kernel_lb_addr eloc; | 157 | struct kernel_lb_addr eloc; |
158 | uint32_t elen; | 158 | uint32_t elen; |
159 | sector_t offset; | 159 | sector_t offset; |
160 | struct extent_position epos = {}; | 160 | struct extent_position epos = {}; |
@@ -171,12 +171,12 @@ static struct fileIdentDesc *udf_find_entry(struct inode *dir, | |||
171 | if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits, &epos, | 171 | if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits, &epos, |
172 | &eloc, &elen, &offset) != (EXT_RECORDED_ALLOCATED >> 30)) | 172 | &eloc, &elen, &offset) != (EXT_RECORDED_ALLOCATED >> 30)) |
173 | goto out_err; | 173 | goto out_err; |
174 | block = udf_get_lb_pblock(dir->i_sb, eloc, offset); | 174 | block = udf_get_lb_pblock(dir->i_sb, &eloc, offset); |
175 | if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { | 175 | if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { |
176 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) | 176 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) |
177 | epos.offset -= sizeof(short_ad); | 177 | epos.offset -= sizeof(struct short_ad); |
178 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) | 178 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) |
179 | epos.offset -= sizeof(long_ad); | 179 | epos.offset -= sizeof(struct long_ad); |
180 | } else | 180 | } else |
181 | offset = 0; | 181 | offset = 0; |
182 | 182 | ||
@@ -268,7 +268,7 @@ static struct dentry *udf_lookup(struct inode *dir, struct dentry *dentry, | |||
268 | #ifdef UDF_RECOVERY | 268 | #ifdef UDF_RECOVERY |
269 | /* temporary shorthand for specifying files by inode number */ | 269 | /* temporary shorthand for specifying files by inode number */ |
270 | if (!strncmp(dentry->d_name.name, ".B=", 3)) { | 270 | if (!strncmp(dentry->d_name.name, ".B=", 3)) { |
271 | kernel_lb_addr lb = { | 271 | struct kernel_lb_addr lb = { |
272 | .logicalBlockNum = 0, | 272 | .logicalBlockNum = 0, |
273 | .partitionReferenceNum = | 273 | .partitionReferenceNum = |
274 | simple_strtoul(dentry->d_name.name + 3, | 274 | simple_strtoul(dentry->d_name.name + 3, |
@@ -283,11 +283,14 @@ static struct dentry *udf_lookup(struct inode *dir, struct dentry *dentry, | |||
283 | #endif /* UDF_RECOVERY */ | 283 | #endif /* UDF_RECOVERY */ |
284 | 284 | ||
285 | if (udf_find_entry(dir, &dentry->d_name, &fibh, &cfi)) { | 285 | if (udf_find_entry(dir, &dentry->d_name, &fibh, &cfi)) { |
286 | struct kernel_lb_addr loc; | ||
287 | |||
286 | if (fibh.sbh != fibh.ebh) | 288 | if (fibh.sbh != fibh.ebh) |
287 | brelse(fibh.ebh); | 289 | brelse(fibh.ebh); |
288 | brelse(fibh.sbh); | 290 | brelse(fibh.sbh); |
289 | 291 | ||
290 | inode = udf_iget(dir->i_sb, lelb_to_cpu(cfi.icb.extLocation)); | 292 | loc = lelb_to_cpu(cfi.icb.extLocation); |
293 | inode = udf_iget(dir->i_sb, &loc); | ||
291 | if (!inode) { | 294 | if (!inode) { |
292 | unlock_kernel(); | 295 | unlock_kernel(); |
293 | return ERR_PTR(-EACCES); | 296 | return ERR_PTR(-EACCES); |
@@ -313,7 +316,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir, | |||
313 | uint8_t lfi; | 316 | uint8_t lfi; |
314 | uint16_t liu; | 317 | uint16_t liu; |
315 | int block; | 318 | int block; |
316 | kernel_lb_addr eloc; | 319 | struct kernel_lb_addr eloc; |
317 | uint32_t elen = 0; | 320 | uint32_t elen = 0; |
318 | sector_t offset; | 321 | sector_t offset; |
319 | struct extent_position epos = {}; | 322 | struct extent_position epos = {}; |
@@ -351,16 +354,16 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir, | |||
351 | if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits, &epos, | 354 | if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits, &epos, |
352 | &eloc, &elen, &offset) != (EXT_RECORDED_ALLOCATED >> 30)) { | 355 | &eloc, &elen, &offset) != (EXT_RECORDED_ALLOCATED >> 30)) { |
353 | block = udf_get_lb_pblock(dir->i_sb, | 356 | block = udf_get_lb_pblock(dir->i_sb, |
354 | dinfo->i_location, 0); | 357 | &dinfo->i_location, 0); |
355 | fibh->soffset = fibh->eoffset = sb->s_blocksize; | 358 | fibh->soffset = fibh->eoffset = sb->s_blocksize; |
356 | goto add; | 359 | goto add; |
357 | } | 360 | } |
358 | block = udf_get_lb_pblock(dir->i_sb, eloc, offset); | 361 | block = udf_get_lb_pblock(dir->i_sb, &eloc, offset); |
359 | if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { | 362 | if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { |
360 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) | 363 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) |
361 | epos.offset -= sizeof(short_ad); | 364 | epos.offset -= sizeof(struct short_ad); |
362 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) | 365 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) |
363 | epos.offset -= sizeof(long_ad); | 366 | epos.offset -= sizeof(struct long_ad); |
364 | } else | 367 | } else |
365 | offset = 0; | 368 | offset = 0; |
366 | 369 | ||
@@ -409,10 +412,10 @@ add: | |||
409 | if (dinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && elen) { | 412 | if (dinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && elen) { |
410 | elen = (elen + sb->s_blocksize - 1) & ~(sb->s_blocksize - 1); | 413 | elen = (elen + sb->s_blocksize - 1) & ~(sb->s_blocksize - 1); |
411 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) | 414 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) |
412 | epos.offset -= sizeof(short_ad); | 415 | epos.offset -= sizeof(struct short_ad); |
413 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) | 416 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) |
414 | epos.offset -= sizeof(long_ad); | 417 | epos.offset -= sizeof(struct long_ad); |
415 | udf_write_aext(dir, &epos, eloc, elen, 1); | 418 | udf_write_aext(dir, &epos, &eloc, elen, 1); |
416 | } | 419 | } |
417 | f_pos += nfidlen; | 420 | f_pos += nfidlen; |
418 | 421 | ||
@@ -494,10 +497,10 @@ add: | |||
494 | memset(cfi, 0, sizeof(struct fileIdentDesc)); | 497 | memset(cfi, 0, sizeof(struct fileIdentDesc)); |
495 | if (UDF_SB(sb)->s_udfrev >= 0x0200) | 498 | if (UDF_SB(sb)->s_udfrev >= 0x0200) |
496 | udf_new_tag((char *)cfi, TAG_IDENT_FID, 3, 1, block, | 499 | udf_new_tag((char *)cfi, TAG_IDENT_FID, 3, 1, block, |
497 | sizeof(tag)); | 500 | sizeof(struct tag)); |
498 | else | 501 | else |
499 | udf_new_tag((char *)cfi, TAG_IDENT_FID, 2, 1, block, | 502 | udf_new_tag((char *)cfi, TAG_IDENT_FID, 2, 1, block, |
500 | sizeof(tag)); | 503 | sizeof(struct tag)); |
501 | cfi->fileVersionNum = cpu_to_le16(1); | 504 | cfi->fileVersionNum = cpu_to_le16(1); |
502 | cfi->lengthFileIdent = namelen; | 505 | cfi->lengthFileIdent = namelen; |
503 | cfi->lengthOfImpUse = cpu_to_le16(0); | 506 | cfi->lengthOfImpUse = cpu_to_le16(0); |
@@ -530,7 +533,7 @@ static int udf_delete_entry(struct inode *inode, struct fileIdentDesc *fi, | |||
530 | cfi->fileCharacteristics |= FID_FILE_CHAR_DELETED; | 533 | cfi->fileCharacteristics |= FID_FILE_CHAR_DELETED; |
531 | 534 | ||
532 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT)) | 535 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT)) |
533 | memset(&(cfi->icb), 0x00, sizeof(long_ad)); | 536 | memset(&(cfi->icb), 0x00, sizeof(struct long_ad)); |
534 | 537 | ||
535 | return udf_write_fi(inode, cfi, fi, fibh, NULL, NULL); | 538 | return udf_write_fi(inode, cfi, fi, fibh, NULL, NULL); |
536 | } | 539 | } |
@@ -710,7 +713,7 @@ static int empty_dir(struct inode *dir) | |||
710 | loff_t f_pos; | 713 | loff_t f_pos; |
711 | loff_t size = udf_ext0_offset(dir) + dir->i_size; | 714 | loff_t size = udf_ext0_offset(dir) + dir->i_size; |
712 | int block; | 715 | int block; |
713 | kernel_lb_addr eloc; | 716 | struct kernel_lb_addr eloc; |
714 | uint32_t elen; | 717 | uint32_t elen; |
715 | sector_t offset; | 718 | sector_t offset; |
716 | struct extent_position epos = {}; | 719 | struct extent_position epos = {}; |
@@ -724,12 +727,12 @@ static int empty_dir(struct inode *dir) | |||
724 | else if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits, | 727 | else if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits, |
725 | &epos, &eloc, &elen, &offset) == | 728 | &epos, &eloc, &elen, &offset) == |
726 | (EXT_RECORDED_ALLOCATED >> 30)) { | 729 | (EXT_RECORDED_ALLOCATED >> 30)) { |
727 | block = udf_get_lb_pblock(dir->i_sb, eloc, offset); | 730 | block = udf_get_lb_pblock(dir->i_sb, &eloc, offset); |
728 | if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { | 731 | if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { |
729 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) | 732 | if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT) |
730 | epos.offset -= sizeof(short_ad); | 733 | epos.offset -= sizeof(struct short_ad); |
731 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) | 734 | else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG) |
732 | epos.offset -= sizeof(long_ad); | 735 | epos.offset -= sizeof(struct long_ad); |
733 | } else | 736 | } else |
734 | offset = 0; | 737 | offset = 0; |
735 | 738 | ||
@@ -778,7 +781,7 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry) | |||
778 | struct inode *inode = dentry->d_inode; | 781 | struct inode *inode = dentry->d_inode; |
779 | struct udf_fileident_bh fibh; | 782 | struct udf_fileident_bh fibh; |
780 | struct fileIdentDesc *fi, cfi; | 783 | struct fileIdentDesc *fi, cfi; |
781 | kernel_lb_addr tloc; | 784 | struct kernel_lb_addr tloc; |
782 | 785 | ||
783 | retval = -ENOENT; | 786 | retval = -ENOENT; |
784 | lock_kernel(); | 787 | lock_kernel(); |
@@ -788,7 +791,7 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry) | |||
788 | 791 | ||
789 | retval = -EIO; | 792 | retval = -EIO; |
790 | tloc = lelb_to_cpu(cfi.icb.extLocation); | 793 | tloc = lelb_to_cpu(cfi.icb.extLocation); |
791 | if (udf_get_lb_pblock(dir->i_sb, tloc, 0) != inode->i_ino) | 794 | if (udf_get_lb_pblock(dir->i_sb, &tloc, 0) != inode->i_ino) |
792 | goto end_rmdir; | 795 | goto end_rmdir; |
793 | retval = -ENOTEMPTY; | 796 | retval = -ENOTEMPTY; |
794 | if (!empty_dir(inode)) | 797 | if (!empty_dir(inode)) |
@@ -824,7 +827,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry) | |||
824 | struct udf_fileident_bh fibh; | 827 | struct udf_fileident_bh fibh; |
825 | struct fileIdentDesc *fi; | 828 | struct fileIdentDesc *fi; |
826 | struct fileIdentDesc cfi; | 829 | struct fileIdentDesc cfi; |
827 | kernel_lb_addr tloc; | 830 | struct kernel_lb_addr tloc; |
828 | 831 | ||
829 | retval = -ENOENT; | 832 | retval = -ENOENT; |
830 | lock_kernel(); | 833 | lock_kernel(); |
@@ -834,7 +837,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry) | |||
834 | 837 | ||
835 | retval = -EIO; | 838 | retval = -EIO; |
836 | tloc = lelb_to_cpu(cfi.icb.extLocation); | 839 | tloc = lelb_to_cpu(cfi.icb.extLocation); |
837 | if (udf_get_lb_pblock(dir->i_sb, tloc, 0) != inode->i_ino) | 840 | if (udf_get_lb_pblock(dir->i_sb, &tloc, 0) != inode->i_ino) |
838 | goto end_unlink; | 841 | goto end_unlink; |
839 | 842 | ||
840 | if (!inode->i_nlink) { | 843 | if (!inode->i_nlink) { |
@@ -897,7 +900,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, | |||
897 | inode->i_op = &page_symlink_inode_operations; | 900 | inode->i_op = &page_symlink_inode_operations; |
898 | 901 | ||
899 | if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) { | 902 | if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) { |
900 | kernel_lb_addr eloc; | 903 | struct kernel_lb_addr eloc; |
901 | uint32_t bsize; | 904 | uint32_t bsize; |
902 | 905 | ||
903 | block = udf_new_block(inode->i_sb, inode, | 906 | block = udf_new_block(inode->i_sb, inode, |
@@ -913,7 +916,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, | |||
913 | iinfo->i_location.partitionReferenceNum; | 916 | iinfo->i_location.partitionReferenceNum; |
914 | bsize = inode->i_sb->s_blocksize; | 917 | bsize = inode->i_sb->s_blocksize; |
915 | iinfo->i_lenExtents = bsize; | 918 | iinfo->i_lenExtents = bsize; |
916 | udf_add_aext(inode, &epos, eloc, bsize, 0); | 919 | udf_add_aext(inode, &epos, &eloc, bsize, 0); |
917 | brelse(epos.bh); | 920 | brelse(epos.bh); |
918 | 921 | ||
919 | block = udf_get_pblock(inode->i_sb, block, | 922 | block = udf_get_pblock(inode->i_sb, block, |
@@ -1108,7 +1111,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1108 | struct fileIdentDesc ocfi, ncfi; | 1111 | struct fileIdentDesc ocfi, ncfi; |
1109 | struct buffer_head *dir_bh = NULL; | 1112 | struct buffer_head *dir_bh = NULL; |
1110 | int retval = -ENOENT; | 1113 | int retval = -ENOENT; |
1111 | kernel_lb_addr tloc; | 1114 | struct kernel_lb_addr tloc; |
1112 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); | 1115 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); |
1113 | 1116 | ||
1114 | lock_kernel(); | 1117 | lock_kernel(); |
@@ -1119,7 +1122,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1119 | brelse(ofibh.sbh); | 1122 | brelse(ofibh.sbh); |
1120 | } | 1123 | } |
1121 | tloc = lelb_to_cpu(ocfi.icb.extLocation); | 1124 | tloc = lelb_to_cpu(ocfi.icb.extLocation); |
1122 | if (!ofi || udf_get_lb_pblock(old_dir->i_sb, tloc, 0) | 1125 | if (!ofi || udf_get_lb_pblock(old_dir->i_sb, &tloc, 0) |
1123 | != old_inode->i_ino) | 1126 | != old_inode->i_ino) |
1124 | goto end_rename; | 1127 | goto end_rename; |
1125 | 1128 | ||
@@ -1158,7 +1161,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1158 | if (!dir_fi) | 1161 | if (!dir_fi) |
1159 | goto end_rename; | 1162 | goto end_rename; |
1160 | tloc = lelb_to_cpu(dir_fi->icb.extLocation); | 1163 | tloc = lelb_to_cpu(dir_fi->icb.extLocation); |
1161 | if (udf_get_lb_pblock(old_inode->i_sb, tloc, 0) != | 1164 | if (udf_get_lb_pblock(old_inode->i_sb, &tloc, 0) != |
1162 | old_dir->i_ino) | 1165 | old_dir->i_ino) |
1163 | goto end_rename; | 1166 | goto end_rename; |
1164 | 1167 | ||
@@ -1187,7 +1190,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1187 | */ | 1190 | */ |
1188 | ncfi.fileVersionNum = ocfi.fileVersionNum; | 1191 | ncfi.fileVersionNum = ocfi.fileVersionNum; |
1189 | ncfi.fileCharacteristics = ocfi.fileCharacteristics; | 1192 | ncfi.fileCharacteristics = ocfi.fileCharacteristics; |
1190 | memcpy(&(ncfi.icb), &(ocfi.icb), sizeof(long_ad)); | 1193 | memcpy(&(ncfi.icb), &(ocfi.icb), sizeof(struct long_ad)); |
1191 | udf_write_fi(new_dir, &ncfi, nfi, &nfibh, NULL, NULL); | 1194 | udf_write_fi(new_dir, &ncfi, nfi, &nfibh, NULL, NULL); |
1192 | 1195 | ||
1193 | /* The old fid may have moved - find it again */ | 1196 | /* The old fid may have moved - find it again */ |
@@ -1242,6 +1245,7 @@ end_rename: | |||
1242 | 1245 | ||
1243 | static struct dentry *udf_get_parent(struct dentry *child) | 1246 | static struct dentry *udf_get_parent(struct dentry *child) |
1244 | { | 1247 | { |
1248 | struct kernel_lb_addr tloc; | ||
1245 | struct inode *inode = NULL; | 1249 | struct inode *inode = NULL; |
1246 | struct qstr dotdot = {.name = "..", .len = 2}; | 1250 | struct qstr dotdot = {.name = "..", .len = 2}; |
1247 | struct fileIdentDesc cfi; | 1251 | struct fileIdentDesc cfi; |
@@ -1255,8 +1259,8 @@ static struct dentry *udf_get_parent(struct dentry *child) | |||
1255 | brelse(fibh.ebh); | 1259 | brelse(fibh.ebh); |
1256 | brelse(fibh.sbh); | 1260 | brelse(fibh.sbh); |
1257 | 1261 | ||
1258 | inode = udf_iget(child->d_inode->i_sb, | 1262 | tloc = lelb_to_cpu(cfi.icb.extLocation); |
1259 | lelb_to_cpu(cfi.icb.extLocation)); | 1263 | inode = udf_iget(child->d_inode->i_sb, &tloc); |
1260 | if (!inode) | 1264 | if (!inode) |
1261 | goto out_unlock; | 1265 | goto out_unlock; |
1262 | unlock_kernel(); | 1266 | unlock_kernel(); |
@@ -1272,14 +1276,14 @@ static struct dentry *udf_nfs_get_inode(struct super_block *sb, u32 block, | |||
1272 | u16 partref, __u32 generation) | 1276 | u16 partref, __u32 generation) |
1273 | { | 1277 | { |
1274 | struct inode *inode; | 1278 | struct inode *inode; |
1275 | kernel_lb_addr loc; | 1279 | struct kernel_lb_addr loc; |
1276 | 1280 | ||
1277 | if (block == 0) | 1281 | if (block == 0) |
1278 | return ERR_PTR(-ESTALE); | 1282 | return ERR_PTR(-ESTALE); |
1279 | 1283 | ||
1280 | loc.logicalBlockNum = block; | 1284 | loc.logicalBlockNum = block; |
1281 | loc.partitionReferenceNum = partref; | 1285 | loc.partitionReferenceNum = partref; |
1282 | inode = udf_iget(sb, loc); | 1286 | inode = udf_iget(sb, &loc); |
1283 | 1287 | ||
1284 | if (inode == NULL) | 1288 | if (inode == NULL) |
1285 | return ERR_PTR(-ENOMEM); | 1289 | return ERR_PTR(-ENOMEM); |
@@ -1318,7 +1322,7 @@ static int udf_encode_fh(struct dentry *de, __u32 *fh, int *lenp, | |||
1318 | { | 1322 | { |
1319 | int len = *lenp; | 1323 | int len = *lenp; |
1320 | struct inode *inode = de->d_inode; | 1324 | struct inode *inode = de->d_inode; |
1321 | kernel_lb_addr location = UDF_I(inode)->i_location; | 1325 | struct kernel_lb_addr location = UDF_I(inode)->i_location; |
1322 | struct fid *fid = (struct fid *)fh; | 1326 | struct fid *fid = (struct fid *)fh; |
1323 | int type = FILEID_UDF_WITHOUT_PARENT; | 1327 | int type = FILEID_UDF_WITHOUT_PARENT; |
1324 | 1328 | ||