|
@@ -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) {
|
|
@@ -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;
|