aboutsummaryrefslogtreecommitdiffstats
path: root/fs/udf/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/udf/namei.c')
-rw-r--r--fs/udf/namei.c112
1 files changed, 61 insertions, 51 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c
index 23e530659fa5..35e5bebe4fab 100644
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -158,23 +158,23 @@ static struct fileIdentDesc *udf_find_entry(struct inode *dir,
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 = {};
161 struct udf_inode_info *dinfo = UDF_I(dir);
161 162
162 size = (udf_ext0_offset(dir) + dir->i_size) >> 2; 163 size = (udf_ext0_offset(dir) + dir->i_size) >> 2;
163 f_pos = (udf_ext0_offset(dir) >> 2); 164 f_pos = (udf_ext0_offset(dir) >> 2);
164 165
165 fibh->soffset = fibh->eoffset = 166 fibh->soffset = fibh->eoffset =
166 (f_pos & ((dir->i_sb->s_blocksize - 1) >> 2)) << 2; 167 (f_pos & ((dir->i_sb->s_blocksize - 1) >> 2)) << 2;
167 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 168 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
168 fibh->sbh = fibh->ebh = NULL; 169 fibh->sbh = fibh->ebh = NULL;
169 else if (inode_bmap(dir, f_pos >> (dir->i_sb->s_blocksize_bits - 2), 170 else if (inode_bmap(dir, f_pos >> (dir->i_sb->s_blocksize_bits - 2),
170 &epos, &eloc, &elen, &offset) == 171 &epos, &eloc, &elen, &offset) ==
171 (EXT_RECORDED_ALLOCATED >> 30)) { 172 (EXT_RECORDED_ALLOCATED >> 30)) {
172 block = udf_get_lb_pblock(dir->i_sb, eloc, offset); 173 block = udf_get_lb_pblock(dir->i_sb, eloc, offset);
173 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { 174 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) {
174 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_SHORT) 175 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
175 epos.offset -= sizeof(short_ad); 176 epos.offset -= sizeof(short_ad);
176 else if (UDF_I(dir)->i_alloc_type == 177 else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
177 ICBTAG_FLAG_AD_LONG)
178 epos.offset -= sizeof(long_ad); 178 epos.offset -= sizeof(long_ad);
179 } else 179 } else
180 offset = 0; 180 offset = 0;
@@ -351,6 +351,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
351 uint32_t elen; 351 uint32_t elen;
352 sector_t offset; 352 sector_t offset;
353 struct extent_position epos = {}; 353 struct extent_position epos = {};
354 struct udf_inode_info *dinfo;
354 355
355 if (dentry) { 356 if (dentry) {
356 if (!dentry->d_name.len) { 357 if (!dentry->d_name.len) {
@@ -373,17 +374,17 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
373 374
374 fibh->soffset = fibh->eoffset = 375 fibh->soffset = fibh->eoffset =
375 (f_pos & ((dir->i_sb->s_blocksize - 1) >> 2)) << 2; 376 (f_pos & ((dir->i_sb->s_blocksize - 1) >> 2)) << 2;
376 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 377 dinfo = UDF_I(dir);
378 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
377 fibh->sbh = fibh->ebh = NULL; 379 fibh->sbh = fibh->ebh = NULL;
378 else if (inode_bmap(dir, f_pos >> (dir->i_sb->s_blocksize_bits - 2), 380 else if (inode_bmap(dir, f_pos >> (dir->i_sb->s_blocksize_bits - 2),
379 &epos, &eloc, &elen, &offset) == 381 &epos, &eloc, &elen, &offset) ==
380 (EXT_RECORDED_ALLOCATED >> 30)) { 382 (EXT_RECORDED_ALLOCATED >> 30)) {
381 block = udf_get_lb_pblock(dir->i_sb, eloc, offset); 383 block = udf_get_lb_pblock(dir->i_sb, eloc, offset);
382 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { 384 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) {
383 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_SHORT) 385 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
384 epos.offset -= sizeof(short_ad); 386 epos.offset -= sizeof(short_ad);
385 else if (UDF_I(dir)->i_alloc_type == 387 else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
386 ICBTAG_FLAG_AD_LONG)
387 epos.offset -= sizeof(long_ad); 388 epos.offset -= sizeof(long_ad);
388 } else 389 } else
389 offset = 0; 390 offset = 0;
@@ -395,10 +396,10 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
395 return NULL; 396 return NULL;
396 } 397 }
397 398
398 block = UDF_I(dir)->i_location.logicalBlockNum; 399 block = dinfo->i_location.logicalBlockNum;
399 400
400 } else { 401 } else {
401 block = udf_get_lb_pblock(dir->i_sb, UDF_I(dir)->i_location, 0); 402 block = udf_get_lb_pblock(dir->i_sb, dinfo->i_location, 0);
402 fibh->sbh = fibh->ebh = NULL; 403 fibh->sbh = fibh->ebh = NULL;
403 fibh->soffset = fibh->eoffset = sb->s_blocksize; 404 fibh->soffset = fibh->eoffset = sb->s_blocksize;
404 goto add; 405 goto add;
@@ -477,7 +478,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir,
477add: 478add:
478 f_pos += nfidlen; 479 f_pos += nfidlen;
479 480
480 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB && 481 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB &&
481 sb->s_blocksize - fibh->eoffset < nfidlen) { 482 sb->s_blocksize - fibh->eoffset < nfidlen) {
482 brelse(epos.bh); 483 brelse(epos.bh);
483 epos.bh = NULL; 484 epos.bh = NULL;
@@ -491,15 +492,15 @@ add:
491 udf_expand_dir_adinicb(dir, &block, err); 492 udf_expand_dir_adinicb(dir, &block, err);
492 if (!fibh->sbh) 493 if (!fibh->sbh)
493 return NULL; 494 return NULL;
494 epos.block = UDF_I(dir)->i_location; 495 epos.block = dinfo->i_location;
495 eloc.logicalBlockNum = block; 496 eloc.logicalBlockNum = block;
496 eloc.partitionReferenceNum = 497 eloc.partitionReferenceNum =
497 UDF_I(dir)->i_location.partitionReferenceNum; 498 dinfo->i_location.partitionReferenceNum;
498 elen = dir->i_sb->s_blocksize; 499 elen = dir->i_sb->s_blocksize;
499 epos.offset = udf_file_entry_alloc_offset(dir); 500 epos.offset = udf_file_entry_alloc_offset(dir);
500 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_SHORT) 501 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
501 epos.offset += sizeof(short_ad); 502 epos.offset += sizeof(short_ad);
502 else if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_LONG) 503 else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
503 epos.offset += sizeof(long_ad); 504 epos.offset += sizeof(long_ad);
504 } 505 }
505 506
@@ -511,13 +512,13 @@ add:
511 fibh->sbh = fibh->ebh; 512 fibh->sbh = fibh->ebh;
512 } 513 }
513 514
514 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { 515 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
515 block = UDF_I(dir)->i_location.logicalBlockNum; 516 block = dinfo->i_location.logicalBlockNum;
516 fi = (struct fileIdentDesc *) 517 fi = (struct fileIdentDesc *)
517 (UDF_I(dir)->i_ext.i_data + 518 (dinfo->i_ext.i_data +
518 fibh->soffset - 519 fibh->soffset -
519 udf_ext0_offset(dir) + 520 udf_ext0_offset(dir) +
520 UDF_I(dir)->i_lenEAttr); 521 dinfo->i_lenEAttr);
521 } else { 522 } else {
522 block = eloc.logicalBlockNum + 523 block = eloc.logicalBlockNum +
523 ((elen - 1) >> 524 ((elen - 1) >>
@@ -575,8 +576,8 @@ add:
575 if (!udf_write_fi(dir, cfi, fi, fibh, NULL, name)) { 576 if (!udf_write_fi(dir, cfi, fi, fibh, NULL, name)) {
576 brelse(epos.bh); 577 brelse(epos.bh);
577 dir->i_size += nfidlen; 578 dir->i_size += nfidlen;
578 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 579 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
579 UDF_I(dir)->i_lenAlloc += nfidlen; 580 dinfo->i_lenAlloc += nfidlen;
580 mark_inode_dirty(dir); 581 mark_inode_dirty(dir);
581 return fi; 582 return fi;
582 } else { 583 } else {
@@ -608,6 +609,7 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode,
608 struct inode *inode; 609 struct inode *inode;
609 struct fileIdentDesc cfi, *fi; 610 struct fileIdentDesc cfi, *fi;
610 int err; 611 int err;
612 struct udf_inode_info *iinfo;
611 613
612 lock_kernel(); 614 lock_kernel();
613 inode = udf_new_inode(dir, mode, &err); 615 inode = udf_new_inode(dir, mode, &err);
@@ -616,7 +618,8 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode,
616 return err; 618 return err;
617 } 619 }
618 620
619 if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 621 iinfo = UDF_I(inode);
622 if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
620 inode->i_data.a_ops = &udf_adinicb_aops; 623 inode->i_data.a_ops = &udf_adinicb_aops;
621 else 624 else
622 inode->i_data.a_ops = &udf_aops; 625 inode->i_data.a_ops = &udf_aops;
@@ -634,9 +637,9 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode,
634 return err; 637 return err;
635 } 638 }
636 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); 639 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize);
637 cfi.icb.extLocation = cpu_to_lelb(UDF_I(inode)->i_location); 640 cfi.icb.extLocation = cpu_to_lelb(iinfo->i_location);
638 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = 641 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse =
639 cpu_to_le32(UDF_I(inode)->i_unique & 0x00000000FFFFFFFFUL); 642 cpu_to_le32(iinfo->i_unique & 0x00000000FFFFFFFFUL);
640 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL); 643 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
641 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 644 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
642 mark_inode_dirty(dir); 645 mark_inode_dirty(dir);
@@ -656,6 +659,7 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode,
656 struct udf_fileident_bh fibh; 659 struct udf_fileident_bh fibh;
657 struct fileIdentDesc cfi, *fi; 660 struct fileIdentDesc cfi, *fi;
658 int err; 661 int err;
662 struct udf_inode_info *iinfo;
659 663
660 if (!old_valid_dev(rdev)) 664 if (!old_valid_dev(rdev))
661 return -EINVAL; 665 return -EINVAL;
@@ -666,6 +670,7 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode,
666 if (!inode) 670 if (!inode)
667 goto out; 671 goto out;
668 672
673 iinfo = UDF_I(inode);
669 inode->i_uid = current->fsuid; 674 inode->i_uid = current->fsuid;
670 init_special_inode(inode, mode, rdev); 675 init_special_inode(inode, mode, rdev);
671 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); 676 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
@@ -677,9 +682,9 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode,
677 return err; 682 return err;
678 } 683 }
679 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); 684 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize);
680 cfi.icb.extLocation = cpu_to_lelb(UDF_I(inode)->i_location); 685 cfi.icb.extLocation = cpu_to_lelb(iinfo->i_location);
681 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = 686 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse =
682 cpu_to_le32(UDF_I(inode)->i_unique & 0x00000000FFFFFFFFUL); 687 cpu_to_le32(iinfo->i_unique & 0x00000000FFFFFFFFUL);
683 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL); 688 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
684 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 689 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
685 mark_inode_dirty(dir); 690 mark_inode_dirty(dir);
@@ -702,6 +707,8 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode)
702 struct udf_fileident_bh fibh; 707 struct udf_fileident_bh fibh;
703 struct fileIdentDesc cfi, *fi; 708 struct fileIdentDesc cfi, *fi;
704 int err; 709 int err;
710 struct udf_inode_info *dinfo = UDF_I(dir);
711 struct udf_inode_info *iinfo;
705 712
706 lock_kernel(); 713 lock_kernel();
707 err = -EMLINK; 714 err = -EMLINK;
@@ -713,6 +720,7 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode)
713 if (!inode) 720 if (!inode)
714 goto out; 721 goto out;
715 722
723 iinfo = UDF_I(inode);
716 inode->i_op = &udf_dir_inode_operations; 724 inode->i_op = &udf_dir_inode_operations;
717 inode->i_fop = &udf_dir_operations; 725 inode->i_fop = &udf_dir_operations;
718 fi = udf_add_entry(inode, NULL, &fibh, &cfi, &err); 726 fi = udf_add_entry(inode, NULL, &fibh, &cfi, &err);
@@ -724,9 +732,9 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode)
724 } 732 }
725 inode->i_nlink = 2; 733 inode->i_nlink = 2;
726 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); 734 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize);
727 cfi.icb.extLocation = cpu_to_lelb(UDF_I(dir)->i_location); 735 cfi.icb.extLocation = cpu_to_lelb(dinfo->i_location);
728 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = 736 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse =
729 cpu_to_le32(UDF_I(dir)->i_unique & 0x00000000FFFFFFFFUL); 737 cpu_to_le32(dinfo->i_unique & 0x00000000FFFFFFFFUL);
730 cfi.fileCharacteristics = 738 cfi.fileCharacteristics =
731 FID_FILE_CHAR_DIRECTORY | FID_FILE_CHAR_PARENT; 739 FID_FILE_CHAR_DIRECTORY | FID_FILE_CHAR_PARENT;
732 udf_write_fi(inode, &cfi, fi, &fibh, NULL, NULL); 740 udf_write_fi(inode, &cfi, fi, &fibh, NULL, NULL);
@@ -744,9 +752,9 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode)
744 goto out; 752 goto out;
745 } 753 }
746 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); 754 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize);
747 cfi.icb.extLocation = cpu_to_lelb(UDF_I(inode)->i_location); 755 cfi.icb.extLocation = cpu_to_lelb(iinfo->i_location);
748 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = 756 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse =
749 cpu_to_le32(UDF_I(inode)->i_unique & 0x00000000FFFFFFFFUL); 757 cpu_to_le32(iinfo->i_unique & 0x00000000FFFFFFFFUL);
750 cfi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY; 758 cfi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY;
751 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL); 759 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
752 inc_nlink(dir); 760 inc_nlink(dir);
@@ -773,23 +781,23 @@ static int empty_dir(struct inode *dir)
773 uint32_t elen; 781 uint32_t elen;
774 sector_t offset; 782 sector_t offset;
775 struct extent_position epos = {}; 783 struct extent_position epos = {};
784 struct udf_inode_info *dinfo = UDF_I(dir);
776 785
777 f_pos = (udf_ext0_offset(dir) >> 2); 786 f_pos = (udf_ext0_offset(dir) >> 2);
778 787
779 fibh.soffset = fibh.eoffset = 788 fibh.soffset = fibh.eoffset =
780 (f_pos & ((dir->i_sb->s_blocksize - 1) >> 2)) << 2; 789 (f_pos & ((dir->i_sb->s_blocksize - 1) >> 2)) << 2;
781 790
782 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 791 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
783 fibh.sbh = fibh.ebh = NULL; 792 fibh.sbh = fibh.ebh = NULL;
784 else if (inode_bmap(dir, f_pos >> (dir->i_sb->s_blocksize_bits - 2), 793 else if (inode_bmap(dir, f_pos >> (dir->i_sb->s_blocksize_bits - 2),
785 &epos, &eloc, &elen, &offset) == 794 &epos, &eloc, &elen, &offset) ==
786 (EXT_RECORDED_ALLOCATED >> 30)) { 795 (EXT_RECORDED_ALLOCATED >> 30)) {
787 block = udf_get_lb_pblock(dir->i_sb, eloc, offset); 796 block = udf_get_lb_pblock(dir->i_sb, eloc, offset);
788 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) { 797 if ((++offset << dir->i_sb->s_blocksize_bits) < elen) {
789 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_SHORT) 798 if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
790 epos.offset -= sizeof(short_ad); 799 epos.offset -= sizeof(short_ad);
791 else if (UDF_I(dir)->i_alloc_type == 800 else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
792 ICBTAG_FLAG_AD_LONG)
793 epos.offset -= sizeof(long_ad); 801 epos.offset -= sizeof(long_ad);
794 } else 802 } else
795 offset = 0; 803 offset = 0;
@@ -939,38 +947,40 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
939 char name[UDF_NAME_LEN]; 947 char name[UDF_NAME_LEN];
940 int namelen; 948 int namelen;
941 struct buffer_head *bh; 949 struct buffer_head *bh;
950 struct udf_inode_info *iinfo;
942 951
943 lock_kernel(); 952 lock_kernel();
944 inode = udf_new_inode(dir, S_IFLNK, &err); 953 inode = udf_new_inode(dir, S_IFLNK, &err);
945 if (!inode) 954 if (!inode)
946 goto out; 955 goto out;
947 956
957 iinfo = UDF_I(inode);
948 inode->i_mode = S_IFLNK | S_IRWXUGO; 958 inode->i_mode = S_IFLNK | S_IRWXUGO;
949 inode->i_data.a_ops = &udf_symlink_aops; 959 inode->i_data.a_ops = &udf_symlink_aops;
950 inode->i_op = &page_symlink_inode_operations; 960 inode->i_op = &page_symlink_inode_operations;
951 961
952 if (UDF_I(inode)->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) { 962 if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
953 kernel_lb_addr eloc; 963 kernel_lb_addr eloc;
954 uint32_t elen; 964 uint32_t elen;
955 965
956 block = udf_new_block(inode->i_sb, inode, 966 block = udf_new_block(inode->i_sb, inode,
957 UDF_I(inode)->i_location.partitionReferenceNum, 967 iinfo->i_location.partitionReferenceNum,
958 UDF_I(inode)->i_location.logicalBlockNum, &err); 968 iinfo->i_location.logicalBlockNum, &err);
959 if (!block) 969 if (!block)
960 goto out_no_entry; 970 goto out_no_entry;
961 epos.block = UDF_I(inode)->i_location; 971 epos.block = iinfo->i_location;
962 epos.offset = udf_file_entry_alloc_offset(inode); 972 epos.offset = udf_file_entry_alloc_offset(inode);
963 epos.bh = NULL; 973 epos.bh = NULL;
964 eloc.logicalBlockNum = block; 974 eloc.logicalBlockNum = block;
965 eloc.partitionReferenceNum = 975 eloc.partitionReferenceNum =
966 UDF_I(inode)->i_location.partitionReferenceNum; 976 iinfo->i_location.partitionReferenceNum;
967 elen = inode->i_sb->s_blocksize; 977 elen = inode->i_sb->s_blocksize;
968 UDF_I(inode)->i_lenExtents = elen; 978 iinfo->i_lenExtents = elen;
969 udf_add_aext(inode, &epos, eloc, elen, 0); 979 udf_add_aext(inode, &epos, eloc, elen, 0);
970 brelse(epos.bh); 980 brelse(epos.bh);
971 981
972 block = udf_get_pblock(inode->i_sb, block, 982 block = udf_get_pblock(inode->i_sb, block,
973 UDF_I(inode)->i_location.partitionReferenceNum, 983 iinfo->i_location.partitionReferenceNum,
974 0); 984 0);
975 epos.bh = udf_tread(inode->i_sb, block); 985 epos.bh = udf_tread(inode->i_sb, block);
976 lock_buffer(epos.bh); 986 lock_buffer(epos.bh);
@@ -979,9 +989,8 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
979 unlock_buffer(epos.bh); 989 unlock_buffer(epos.bh);
980 mark_buffer_dirty_inode(epos.bh, inode); 990 mark_buffer_dirty_inode(epos.bh, inode);
981 ea = epos.bh->b_data + udf_ext0_offset(inode); 991 ea = epos.bh->b_data + udf_ext0_offset(inode);
982 } else { 992 } else
983 ea = UDF_I(inode)->i_ext.i_data + UDF_I(inode)->i_lenEAttr; 993 ea = iinfo->i_ext.i_data + iinfo->i_lenEAttr;
984 }
985 994
986 eoffset = inode->i_sb->s_blocksize - udf_ext0_offset(inode); 995 eoffset = inode->i_sb->s_blocksize - udf_ext0_offset(inode);
987 pc = (struct pathComponent *)ea; 996 pc = (struct pathComponent *)ea;
@@ -1049,15 +1058,15 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
1049 1058
1050 brelse(epos.bh); 1059 brelse(epos.bh);
1051 inode->i_size = elen; 1060 inode->i_size = elen;
1052 if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 1061 if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
1053 UDF_I(inode)->i_lenAlloc = inode->i_size; 1062 iinfo->i_lenAlloc = inode->i_size;
1054 mark_inode_dirty(inode); 1063 mark_inode_dirty(inode);
1055 1064
1056 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); 1065 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
1057 if (!fi) 1066 if (!fi)
1058 goto out_no_entry; 1067 goto out_no_entry;
1059 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); 1068 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize);
1060 cfi.icb.extLocation = cpu_to_lelb(UDF_I(inode)->i_location); 1069 cfi.icb.extLocation = cpu_to_lelb(iinfo->i_location);
1061 bh = UDF_SB(inode->i_sb)->s_lvid_bh; 1070 bh = UDF_SB(inode->i_sb)->s_lvid_bh;
1062 if (bh) { 1071 if (bh) {
1063 struct logicalVolIntegrityDesc *lvid = 1072 struct logicalVolIntegrityDesc *lvid =
@@ -1162,6 +1171,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
1162 struct buffer_head *dir_bh = NULL; 1171 struct buffer_head *dir_bh = NULL;
1163 int retval = -ENOENT; 1172 int retval = -ENOENT;
1164 kernel_lb_addr tloc; 1173 kernel_lb_addr tloc;
1174 struct udf_inode_info *old_iinfo = UDF_I(old_inode);
1165 1175
1166 lock_kernel(); 1176 lock_kernel();
1167 ofi = udf_find_entry(old_dir, old_dentry, &ofibh, &ocfi); 1177 ofi = udf_find_entry(old_dir, old_dentry, &ofibh, &ocfi);
@@ -1193,10 +1203,10 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
1193 goto end_rename; 1203 goto end_rename;
1194 } 1204 }
1195 retval = -EIO; 1205 retval = -EIO;
1196 if (UDF_I(old_inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { 1206 if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
1197 dir_fi = udf_get_fileident( 1207 dir_fi = udf_get_fileident(
1198 UDF_I(old_inode)->i_ext.i_data - 1208 old_iinfo->i_ext.i_data -
1199 (UDF_I(old_inode)->i_efe ? 1209 (old_iinfo->i_efe ?
1200 sizeof(struct extendedFileEntry) : 1210 sizeof(struct extendedFileEntry) :
1201 sizeof(struct fileEntry)), 1211 sizeof(struct fileEntry)),
1202 old_inode->i_sb->s_blocksize, &offset); 1212 old_inode->i_sb->s_blocksize, &offset);
@@ -1258,7 +1268,7 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
1258 udf_update_tag((char *)dir_fi, 1268 udf_update_tag((char *)dir_fi,
1259 (sizeof(struct fileIdentDesc) + 1269 (sizeof(struct fileIdentDesc) +
1260 le16_to_cpu(dir_fi->lengthOfImpUse) + 3) & ~3); 1270 le16_to_cpu(dir_fi->lengthOfImpUse) + 3) & ~3);
1261 if (UDF_I(old_inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 1271 if (old_iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
1262 mark_inode_dirty(old_inode); 1272 mark_inode_dirty(old_inode);
1263 else 1273 else
1264 mark_buffer_dirty_inode(dir_bh, old_inode); 1274 mark_buffer_dirty_inode(dir_bh, old_inode);