Skip to content

Commit

Permalink
udf: Remove BKL from free space counting functions
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jan Kara committed Jan 6, 2011
1 parent 7abc2e4 commit d1668fe
Showing 1 changed file with 2 additions and 9 deletions.
11 changes: 2 additions & 9 deletions fs/udf/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -2245,10 +2243,7 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
}
}
brelse(bh);

out:
unlock_kernel();

return accum;
}

Expand All @@ -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;
Expand All @@ -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;
}
Expand Down

0 comments on commit d1668fe

Please sign in to comment.