udf: use get_bh()
Make UDF use get_bh() instead of directly accessing b_count and use
brelse() instead of udf_release_data() which does just brelse()...
Signed-off-by: Jan Kara <jack@suse.cz>
Acked-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
diff --git a/fs/udf/balloc.c b/fs/udf/balloc.c
index 756dbbf..4cec910 100644
--- a/fs/udf/balloc.c
+++ b/fs/udf/balloc.c
@@ -508,8 +508,8 @@
{
i = -1;
oepos.block = epos.block;
- udf_release_data(oepos.bh);
- atomic_inc(&epos.bh->b_count);
+ brelse(oepos.bh);
+ get_bh(epos.bh);
oepos.bh = epos.bh;
oepos.offset = 0;
}
@@ -546,8 +546,8 @@
adsize = sizeof(long_ad);
else
{
- udf_release_data(oepos.bh);
- udf_release_data(epos.bh);
+ brelse(oepos.bh);
+ brelse(epos.bh);
goto error_return;
}
@@ -556,7 +556,7 @@
char *sptr, *dptr;
int loffset;
- udf_release_data(oepos.bh);
+ brelse(oepos.bh);
oepos = epos;
/* Steal a block from the extent being free'd */
@@ -567,7 +567,7 @@
if (!(epos.bh = udf_tread(sb,
udf_get_lb_pblock(sb, epos.block, 0))))
{
- udf_release_data(oepos.bh);
+ brelse(oepos.bh);
goto error_return;
}
aed = (struct allocExtDesc *)(epos.bh->b_data);
@@ -658,8 +658,8 @@
}
}
- udf_release_data(epos.bh);
- udf_release_data(oepos.bh);
+ brelse(epos.bh);
+ brelse(oepos.bh);
error_return:
sb->s_dirt = 1;
@@ -723,7 +723,7 @@
else
alloc_count = 0;
- udf_release_data(epos.bh);
+ brelse(epos.bh);
if (alloc_count && UDF_SB_LVIDBH(sb))
{
@@ -789,9 +789,9 @@
spread = nspread;
if (goal_epos.bh != epos.bh)
{
- udf_release_data(goal_epos.bh);
+ brelse(goal_epos.bh);
goal_epos.bh = epos.bh;
- atomic_inc(&goal_epos.bh->b_count);
+ get_bh(goal_epos.bh);
}
goal_epos.block = epos.block;
goal_epos.offset = epos.offset - adsize;
@@ -800,11 +800,11 @@
}
}
- udf_release_data(epos.bh);
+ brelse(epos.bh);
if (spread == 0xFFFFFFFF)
{
- udf_release_data(goal_epos.bh);
+ brelse(goal_epos.bh);
mutex_unlock(&sbi->s_alloc_mutex);
return 0;
}
@@ -820,7 +820,7 @@
if (inode && DQUOT_ALLOC_BLOCK(inode, 1))
{
- udf_release_data(goal_epos.bh);
+ brelse(goal_epos.bh);
mutex_unlock(&sbi->s_alloc_mutex);
*err = -EDQUOT;
return 0;
@@ -830,7 +830,7 @@
udf_write_aext(table, &goal_epos, goal_eloc, goal_elen, 1);
else
udf_delete_aext(table, goal_epos, goal_eloc, goal_elen);
- udf_release_data(goal_epos.bh);
+ brelse(goal_epos.bh);
if (UDF_SB_LVIDBH(sb))
{
@@ -915,11 +915,14 @@
struct inode * inode,
uint16_t partition, uint32_t goal, int *err)
{
+ int ret;
+
if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_BITMAP)
{
- return udf_bitmap_new_block(sb, inode,
+ ret = udf_bitmap_new_block(sb, inode,
UDF_SB_PARTMAPS(sb)[partition].s_uspace.s_bitmap,
partition, goal, err);
+ return ret;
}
else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_TABLE)
{