diff options
-rw-r--r-- | fs/udf/super.c | 62 |
1 files changed, 1 insertions, 61 deletions
diff --git a/fs/udf/super.c b/fs/udf/super.c index 3040dc2a32f6..68d57b61f3af 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c | |||
@@ -764,9 +764,7 @@ static int udf_find_fileset(struct super_block *sb, | |||
764 | struct kernel_lb_addr *root) | 764 | struct kernel_lb_addr *root) |
765 | { | 765 | { |
766 | struct buffer_head *bh = NULL; | 766 | struct buffer_head *bh = NULL; |
767 | long lastblock; | ||
768 | uint16_t ident; | 767 | uint16_t ident; |
769 | struct udf_sb_info *sbi; | ||
770 | 768 | ||
771 | if (fileset->logicalBlockNum != 0xFFFFFFFF || | 769 | if (fileset->logicalBlockNum != 0xFFFFFFFF || |
772 | fileset->partitionReferenceNum != 0xFFFF) { | 770 | fileset->partitionReferenceNum != 0xFFFF) { |
@@ -779,69 +777,11 @@ static int udf_find_fileset(struct super_block *sb, | |||
779 | return 1; | 777 | return 1; |
780 | } | 778 | } |
781 | 779 | ||
782 | } | ||
783 | |||
784 | sbi = UDF_SB(sb); | ||
785 | if (!bh) { | ||
786 | /* Search backwards through the partitions */ | ||
787 | struct kernel_lb_addr newfileset; | ||
788 | |||
789 | /* --> cvg: FIXME - is it reasonable? */ | ||
790 | return 1; | ||
791 | |||
792 | for (newfileset.partitionReferenceNum = sbi->s_partitions - 1; | ||
793 | (newfileset.partitionReferenceNum != 0xFFFF && | ||
794 | fileset->logicalBlockNum == 0xFFFFFFFF && | ||
795 | fileset->partitionReferenceNum == 0xFFFF); | ||
796 | newfileset.partitionReferenceNum--) { | ||
797 | lastblock = sbi->s_partmaps | ||
798 | [newfileset.partitionReferenceNum] | ||
799 | .s_partition_len; | ||
800 | newfileset.logicalBlockNum = 0; | ||
801 | |||
802 | do { | ||
803 | bh = udf_read_ptagged(sb, &newfileset, 0, | ||
804 | &ident); | ||
805 | if (!bh) { | ||
806 | newfileset.logicalBlockNum++; | ||
807 | continue; | ||
808 | } | ||
809 | |||
810 | switch (ident) { | ||
811 | case TAG_IDENT_SBD: | ||
812 | { | ||
813 | struct spaceBitmapDesc *sp; | ||
814 | sp = (struct spaceBitmapDesc *) | ||
815 | bh->b_data; | ||
816 | newfileset.logicalBlockNum += 1 + | ||
817 | ((le32_to_cpu(sp->numOfBytes) + | ||
818 | sizeof(struct spaceBitmapDesc) | ||
819 | - 1) >> sb->s_blocksize_bits); | ||
820 | brelse(bh); | ||
821 | break; | ||
822 | } | ||
823 | case TAG_IDENT_FSD: | ||
824 | *fileset = newfileset; | ||
825 | break; | ||
826 | default: | ||
827 | newfileset.logicalBlockNum++; | ||
828 | brelse(bh); | ||
829 | bh = NULL; | ||
830 | break; | ||
831 | } | ||
832 | } while (newfileset.logicalBlockNum < lastblock && | ||
833 | fileset->logicalBlockNum == 0xFFFFFFFF && | ||
834 | fileset->partitionReferenceNum == 0xFFFF); | ||
835 | } | ||
836 | } | ||
837 | |||
838 | if ((fileset->logicalBlockNum != 0xFFFFFFFF || | ||
839 | fileset->partitionReferenceNum != 0xFFFF) && bh) { | ||
840 | udf_debug("Fileset at block=%u, partition=%u\n", | 780 | udf_debug("Fileset at block=%u, partition=%u\n", |
841 | fileset->logicalBlockNum, | 781 | fileset->logicalBlockNum, |
842 | fileset->partitionReferenceNum); | 782 | fileset->partitionReferenceNum); |
843 | 783 | ||
844 | sbi->s_partition = fileset->partitionReferenceNum; | 784 | UDF_SB(sb)->s_partition = fileset->partitionReferenceNum; |
845 | udf_load_fileset(sb, bh, root); | 785 | udf_load_fileset(sb, bh, root); |
846 | brelse(bh); | 786 | brelse(bh); |
847 | return 0; | 787 | return 0; |