udf: Remove BKL from free space counting functions
udf_count_free_bitmap() does not need BKL because bitmaps are in a fixed place on disk and so we can count set bits without serialization. udf_count_free_table() is now protected by s_alloc_mutex instead of BKL to get a consistent view of free space extents. Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
7abc2e45e4
commit
d1668fe390
|
@ -2207,8 +2207,6 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
|
|||
uint16_t ident;
|
||||
struct spaceBitmapDesc *bm;
|
||||
|
||||
lock_kernel();
|
||||
|
||||
loc.logicalBlockNum = bitmap->s_extPosition;
|
||||
loc.partitionReferenceNum = UDF_SB(sb)->s_partition;
|
||||
bh = udf_read_ptagged(sb, &loc, 0, &ident);
|
||||
|
@ -2245,10 +2243,7 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
|
|||
}
|
||||
}
|
||||
brelse(bh);
|
||||
|
||||
out:
|
||||
unlock_kernel();
|
||||
|
||||
return accum;
|
||||
}
|
||||
|
||||
|
@ -2261,8 +2256,7 @@ static unsigned int udf_count_free_table(struct super_block *sb,
|
|||
int8_t etype;
|
||||
struct extent_position epos;
|
||||
|
||||
lock_kernel();
|
||||
|
||||
mutex_lock(&UDF_SB(sb)->s_alloc_mutex);
|
||||
epos.block = UDF_I(table)->i_location;
|
||||
epos.offset = sizeof(struct unallocSpaceEntry);
|
||||
epos.bh = NULL;
|
||||
|
@ -2271,8 +2265,7 @@ static unsigned int udf_count_free_table(struct super_block *sb,
|
|||
accum += (elen >> table->i_sb->s_blocksize_bits);
|
||||
|
||||
brelse(epos.bh);
|
||||
|
||||
unlock_kernel();
|
||||
mutex_unlock(&UDF_SB(sb)->s_alloc_mutex);
|
||||
|
||||
return accum;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue