Loading fs/udf/super.c +1 −61 Original line number Diff line number Diff line Loading @@ -764,9 +764,7 @@ static int udf_find_fileset(struct super_block *sb, struct kernel_lb_addr *root) { struct buffer_head *bh = NULL; long lastblock; uint16_t ident; struct udf_sb_info *sbi; if (fileset->logicalBlockNum != 0xFFFFFFFF || fileset->partitionReferenceNum != 0xFFFF) { Loading @@ -779,69 +777,11 @@ static int udf_find_fileset(struct super_block *sb, return 1; } } sbi = UDF_SB(sb); if (!bh) { /* Search backwards through the partitions */ struct kernel_lb_addr newfileset; /* --> cvg: FIXME - is it reasonable? */ return 1; for (newfileset.partitionReferenceNum = sbi->s_partitions - 1; (newfileset.partitionReferenceNum != 0xFFFF && fileset->logicalBlockNum == 0xFFFFFFFF && fileset->partitionReferenceNum == 0xFFFF); newfileset.partitionReferenceNum--) { lastblock = sbi->s_partmaps [newfileset.partitionReferenceNum] .s_partition_len; newfileset.logicalBlockNum = 0; do { bh = udf_read_ptagged(sb, &newfileset, 0, &ident); if (!bh) { newfileset.logicalBlockNum++; continue; } switch (ident) { case TAG_IDENT_SBD: { struct spaceBitmapDesc *sp; sp = (struct spaceBitmapDesc *) bh->b_data; newfileset.logicalBlockNum += 1 + ((le32_to_cpu(sp->numOfBytes) + sizeof(struct spaceBitmapDesc) - 1) >> sb->s_blocksize_bits); brelse(bh); break; } case TAG_IDENT_FSD: *fileset = newfileset; break; default: newfileset.logicalBlockNum++; brelse(bh); bh = NULL; break; } } while (newfileset.logicalBlockNum < lastblock && fileset->logicalBlockNum == 0xFFFFFFFF && fileset->partitionReferenceNum == 0xFFFF); } } if ((fileset->logicalBlockNum != 0xFFFFFFFF || fileset->partitionReferenceNum != 0xFFFF) && bh) { udf_debug("Fileset at block=%u, partition=%u\n", fileset->logicalBlockNum, fileset->partitionReferenceNum); sbi->s_partition = fileset->partitionReferenceNum; UDF_SB(sb)->s_partition = fileset->partitionReferenceNum; udf_load_fileset(sb, bh, root); brelse(bh); return 0; Loading Loading
fs/udf/super.c +1 −61 Original line number Diff line number Diff line Loading @@ -764,9 +764,7 @@ static int udf_find_fileset(struct super_block *sb, struct kernel_lb_addr *root) { struct buffer_head *bh = NULL; long lastblock; uint16_t ident; struct udf_sb_info *sbi; if (fileset->logicalBlockNum != 0xFFFFFFFF || fileset->partitionReferenceNum != 0xFFFF) { Loading @@ -779,69 +777,11 @@ static int udf_find_fileset(struct super_block *sb, return 1; } } sbi = UDF_SB(sb); if (!bh) { /* Search backwards through the partitions */ struct kernel_lb_addr newfileset; /* --> cvg: FIXME - is it reasonable? */ return 1; for (newfileset.partitionReferenceNum = sbi->s_partitions - 1; (newfileset.partitionReferenceNum != 0xFFFF && fileset->logicalBlockNum == 0xFFFFFFFF && fileset->partitionReferenceNum == 0xFFFF); newfileset.partitionReferenceNum--) { lastblock = sbi->s_partmaps [newfileset.partitionReferenceNum] .s_partition_len; newfileset.logicalBlockNum = 0; do { bh = udf_read_ptagged(sb, &newfileset, 0, &ident); if (!bh) { newfileset.logicalBlockNum++; continue; } switch (ident) { case TAG_IDENT_SBD: { struct spaceBitmapDesc *sp; sp = (struct spaceBitmapDesc *) bh->b_data; newfileset.logicalBlockNum += 1 + ((le32_to_cpu(sp->numOfBytes) + sizeof(struct spaceBitmapDesc) - 1) >> sb->s_blocksize_bits); brelse(bh); break; } case TAG_IDENT_FSD: *fileset = newfileset; break; default: newfileset.logicalBlockNum++; brelse(bh); bh = NULL; break; } } while (newfileset.logicalBlockNum < lastblock && fileset->logicalBlockNum == 0xFFFFFFFF && fileset->partitionReferenceNum == 0xFFFF); } } if ((fileset->logicalBlockNum != 0xFFFFFFFF || fileset->partitionReferenceNum != 0xFFFF) && bh) { udf_debug("Fileset at block=%u, partition=%u\n", fileset->logicalBlockNum, fileset->partitionReferenceNum); sbi->s_partition = fileset->partitionReferenceNum; UDF_SB(sb)->s_partition = fileset->partitionReferenceNum; udf_load_fileset(sb, bh, root); brelse(bh); return 0; Loading