Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3bf25cb4 authored by Jan Kara's avatar Jan Kara Committed by Linus Torvalds
Browse files

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: default avatarJan Kara <jack@suse.cz>
Acked-by: default avatarChristoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ff116fc8
Loading
Loading
Loading
Loading
+19 −16
Original line number Diff line number Diff line
@@ -508,8 +508,8 @@ static void udf_table_free_blocks(struct super_block * sb,
		{
			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 @@ static void udf_table_free_blocks(struct super_block * sb,
			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 @@ static void udf_table_free_blocks(struct super_block * sb,
			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 @@ static void udf_table_free_blocks(struct super_block * sb,
			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 @@ static void udf_table_free_blocks(struct super_block * sb,
		}
	}

	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 @@ static int udf_table_prealloc_blocks(struct super_block * sb,
	else
		alloc_count = 0;

	udf_release_data(epos.bh);
	brelse(epos.bh);

	if (alloc_count && UDF_SB_LVIDBH(sb))
	{
@@ -789,9 +789,9 @@ static int udf_table_new_block(struct super_block * sb,
			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 @@ static int udf_table_new_block(struct super_block * sb,
		}
	}

	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 @@ static int udf_table_new_block(struct super_block * sb,

	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 @@ static int udf_table_new_block(struct super_block * sb,
		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 @@ inline int udf_new_block(struct super_block * sb,
	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)
	{
+11 −11
Original line number Diff line number Diff line
@@ -144,7 +144,7 @@ do_udf_readdir(struct inode * dir, struct file *filp, filldir_t filldir, void *d

		if (!(fibh.sbh = fibh.ebh = udf_tread(dir->i_sb, block)))
		{
			udf_release_data(epos.bh);
			brelse(epos.bh);
			return -EIO;
		}
	
@@ -172,7 +172,7 @@ do_udf_readdir(struct inode * dir, struct file *filp, filldir_t filldir, void *d
	}
	else
	{
		udf_release_data(epos.bh);
		brelse(epos.bh);
		return -ENOENT;
	}

@@ -185,9 +185,9 @@ do_udf_readdir(struct inode * dir, struct file *filp, filldir_t filldir, void *d
		if (!fi)
		{
			if (fibh.sbh != fibh.ebh)
				udf_release_data(fibh.ebh);
			udf_release_data(fibh.sbh);
			udf_release_data(epos.bh);
				brelse(fibh.ebh);
			brelse(fibh.sbh);
			brelse(epos.bh);
			return 0;
		}

@@ -245,9 +245,9 @@ do_udf_readdir(struct inode * dir, struct file *filp, filldir_t filldir, void *d
			if (filldir(dirent, fname, flen, filp->f_pos, iblock, dt_type) < 0)
			{
				if (fibh.sbh != fibh.ebh)
					udf_release_data(fibh.ebh);
				udf_release_data(fibh.sbh);
				udf_release_data(epos.bh);
					brelse(fibh.ebh);
				brelse(fibh.sbh);
				brelse(epos.bh);
	 			return 0;
			}
		}
@@ -256,9 +256,9 @@ do_udf_readdir(struct inode * dir, struct file *filp, filldir_t filldir, void *d
	filp->f_pos = nf_pos + 1;

	if (fibh.sbh != fibh.ebh)
		udf_release_data(fibh.ebh);
	udf_release_data(fibh.sbh);
	udf_release_data(epos.bh);
		brelse(fibh.ebh);
	brelse(fibh.sbh);
	brelse(epos.bh);

	return 0;
}
+5 −5
Original line number Diff line number Diff line
@@ -36,14 +36,14 @@ udf_filead_read(struct inode *dir, uint8_t *tmpad, uint8_t ad_size,

	if (!ad)
	{
		udf_release_data(*bh);
		brelse(*bh);
		*error = 1;
		return NULL;
	}

	if (*offset == dir->i_sb->s_blocksize)
	{
		udf_release_data(*bh);
		brelse(*bh);
		block = udf_get_lb_pblock(dir->i_sb, fe_loc, ++*pos);
		if (!block)
			return NULL;
@@ -57,7 +57,7 @@ udf_filead_read(struct inode *dir, uint8_t *tmpad, uint8_t ad_size,
		remainder = dir->i_sb->s_blocksize - loffset;
		memcpy((uint8_t *)ad, (*bh)->b_data + loffset, remainder);

		udf_release_data(*bh);
		brelse(*bh);
		block = udf_get_lb_pblock(dir->i_sb, fe_loc, ++*pos);
		if (!block)
			return NULL;
@@ -120,7 +120,7 @@ udf_fileident_read(struct inode *dir, loff_t *nf_pos,
		else
			epos->offset = lextoffset;

		udf_release_data(fibh->sbh);
		brelse(fibh->sbh);
		if (!(fibh->sbh = fibh->ebh = udf_tread(dir->i_sb, block)))
			return NULL;
		fibh->soffset = fibh->eoffset = 0;
@@ -149,7 +149,7 @@ udf_fileident_read(struct inode *dir, loff_t *nf_pos,
	}
	else if (fibh->sbh != fibh->ebh)
	{
		udf_release_data(fibh->sbh);
		brelse(fibh->sbh);
		fibh->sbh = fibh->ebh;
	}

+37 −37
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ struct buffer_head * udf_expand_dir_adinicb(struct inode *inode, int *block, int
		sfi = udf_fileident_read(inode, &f_pos, &sfibh, &cfi, NULL, NULL, NULL, NULL);
		if (!sfi)
		{
			udf_release_data(dbh);
			brelse(dbh);
			return NULL;
		}
		UDF_I_ALLOCTYPE(inode) = alloctype;
@@ -259,7 +259,7 @@ struct buffer_head * udf_expand_dir_adinicb(struct inode *inode, int *block, int
			sfi->fileIdent + le16_to_cpu(sfi->lengthOfImpUse)))
		{
			UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_IN_ICB;
			udf_release_data(dbh);
			brelse(dbh);
			return NULL;
		}
	}
@@ -277,7 +277,7 @@ struct buffer_head * udf_expand_dir_adinicb(struct inode *inode, int *block, int
	udf_add_aext(inode, &epos, eloc, elen, 0);
	/* UniqueID stuff */

	udf_release_data(epos.bh);
	brelse(epos.bh);
	mark_inode_dirty(inode);
	return dbh;
}
@@ -386,14 +386,14 @@ static struct buffer_head * inode_getblk(struct inode * inode, sector_t block,
	{
		if (prev_epos.bh != cur_epos.bh)
		{
			udf_release_data(prev_epos.bh);
			atomic_inc(&cur_epos.bh->b_count);
			brelse(prev_epos.bh);
			get_bh(cur_epos.bh);
			prev_epos.bh = cur_epos.bh;
		}
		if (cur_epos.bh != next_epos.bh)
		{
			udf_release_data(cur_epos.bh);
			atomic_inc(&next_epos.bh->b_count);
			brelse(cur_epos.bh);
			get_bh(next_epos.bh);
			cur_epos.bh = next_epos.bh;
		}

@@ -436,9 +436,9 @@ static struct buffer_head * inode_getblk(struct inode * inode, sector_t block,
				~(inode->i_sb->s_blocksize - 1));
			etype = udf_write_aext(inode, &cur_epos, eloc, elen, 1);
		}
		udf_release_data(prev_epos.bh);
		udf_release_data(cur_epos.bh);
		udf_release_data(next_epos.bh);
		brelse(prev_epos.bh);
		brelse(cur_epos.bh);
		brelse(next_epos.bh);
		newblock = udf_get_lb_pblock(inode->i_sb, eloc, offset);
		*phys = newblock;
		return NULL;
@@ -492,8 +492,8 @@ static struct buffer_head * inode_getblk(struct inode * inode, sector_t block,
		else
			lastblock = 1;
	}
	udf_release_data(cur_epos.bh);
	udf_release_data(next_epos.bh);
	brelse(cur_epos.bh);
	brelse(next_epos.bh);

	/* if the current extent is not recorded but allocated, get the
		block in the extent corresponding to the requested block */
@@ -513,7 +513,7 @@ static struct buffer_head * inode_getblk(struct inode * inode, sector_t block,
		if (!(newblocknum = udf_new_block(inode->i_sb, inode,
			UDF_I_LOCATION(inode).partitionReferenceNum, goal, err)))
		{
			udf_release_data(prev_epos.bh);
			brelse(prev_epos.bh);
			*err = -ENOSPC;
			return NULL;
		}
@@ -538,7 +538,7 @@ static struct buffer_head * inode_getblk(struct inode * inode, sector_t block,
       the new number of extents is less than the old number */
	udf_update_extents(inode, laarr, startnum, endnum, &prev_epos);

	udf_release_data(prev_epos.bh);
	brelse(prev_epos.bh);

	if (!(newblock = udf_get_pblock(inode->i_sb, newblocknum,
		UDF_I_LOCATION(inode).partitionReferenceNum, 0)))
@@ -934,7 +934,7 @@ __udf_read_inode(struct inode *inode)
	{
		printk(KERN_ERR "udf: udf_read_inode(ino %ld) failed ident=%d\n",
			inode->i_ino, ident);
		udf_release_data(bh);
		brelse(bh);
		make_bad_inode(inode);
		return;
	}
@@ -963,35 +963,35 @@ __udf_read_inode(struct inode *inode)
						ident == TAG_IDENT_EFE)
					{
						memcpy(&UDF_I_LOCATION(inode), &loc, sizeof(kernel_lb_addr));
						udf_release_data(bh);
						udf_release_data(ibh);
						udf_release_data(nbh);
						brelse(bh);
						brelse(ibh);
						brelse(nbh);
						__udf_read_inode(inode);
						return;
					}
					else
					{
						udf_release_data(nbh);
						udf_release_data(ibh);
						brelse(nbh);
						brelse(ibh);
					}
				}
				else
					udf_release_data(ibh);
					brelse(ibh);
			}
		}
		else
			udf_release_data(ibh);
			brelse(ibh);
	}
	else if (le16_to_cpu(fe->icbTag.strategyType) != 4)
	{
		printk(KERN_ERR "udf: unsupported strategy type: %d\n",
			le16_to_cpu(fe->icbTag.strategyType));
		udf_release_data(bh);
		brelse(bh);
		make_bad_inode(inode);
		return;
	}
	udf_fill_inode(inode, bh);
	udf_release_data(bh);
	brelse(bh);
}

static void udf_fill_inode(struct inode *inode, struct buffer_head *bh)
@@ -1334,7 +1334,7 @@ udf_update_inode(struct inode *inode, int do_sync)
				use->descTag.tagChecksum += ((uint8_t *)&(use->descTag))[i];

		mark_buffer_dirty(bh);
		udf_release_data(bh);
		brelse(bh);
		return err;
	}

@@ -1523,7 +1523,7 @@ udf_update_inode(struct inode *inode, int do_sync)
			err = -EIO;
		}
	}
	udf_release_data(bh);
	brelse(bh);
	return err;
}

@@ -1670,7 +1670,7 @@ int8_t udf_add_aext(struct inode *inode, struct extent_position *epos,
			else
				udf_update_tag(epos->bh->b_data, sizeof(struct allocExtDesc));
			mark_buffer_dirty_inode(epos->bh, inode);
			udf_release_data(epos->bh);
			brelse(epos->bh);
		}
		else
			mark_inode_dirty(inode);
@@ -1761,7 +1761,7 @@ int8_t udf_next_aext(struct inode *inode, struct extent_position *epos,
	{
		epos->block = *eloc;
		epos->offset = sizeof(struct allocExtDesc);
		udf_release_data(epos->bh);
		brelse(epos->bh);
		if (!(epos->bh = udf_tread(inode->i_sb, udf_get_lb_pblock(inode->i_sb, epos->block, 0))))
		{
			udf_debug("reading block %d failed!\n",
@@ -1841,7 +1841,7 @@ udf_insert_aext(struct inode *inode, struct extent_position epos,
	int8_t etype;

	if (epos.bh)
		atomic_inc(&epos.bh->b_count);
		get_bh(epos.bh);

	while ((etype = udf_next_aext(inode, &epos, &oeloc, &oelen, 0)) != -1)
	{
@@ -1851,7 +1851,7 @@ udf_insert_aext(struct inode *inode, struct extent_position epos,
		nelen = (etype << 30) | oelen;
	}
	udf_add_aext(inode, &epos, neloc, nelen, 1);
	udf_release_data(epos.bh);
	brelse(epos.bh);
	return (nelen >> 30);
}

@@ -1865,8 +1865,8 @@ int8_t udf_delete_aext(struct inode *inode, struct extent_position epos,

	if (epos.bh)
	{
		atomic_inc(&epos.bh->b_count);
		atomic_inc(&epos.bh->b_count);
		get_bh(epos.bh);
		get_bh(epos.bh);
	}

	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_SHORT)
@@ -1886,8 +1886,8 @@ int8_t udf_delete_aext(struct inode *inode, struct extent_position epos,
		if (oepos.bh != epos.bh)
		{
			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 = epos.offset - adsize;
		}
@@ -1938,8 +1938,8 @@ int8_t udf_delete_aext(struct inode *inode, struct extent_position epos,
		}
	}
	
	udf_release_data(epos.bh);
	udf_release_data(oepos.bh);
	brelse(epos.bh);
	brelse(oepos.bh);
	return (elen >> 30);
}

@@ -1992,7 +1992,7 @@ long udf_block_map(struct inode *inode, sector_t block)
		ret = 0;

	unlock_kernel();
	udf_release_data(epos.bh);
	brelse(epos.bh);

	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_VARCONV))
		return udf_fixed_to_variable(ret);
+0 −6
Original line number Diff line number Diff line
@@ -274,12 +274,6 @@ udf_read_ptagged(struct super_block *sb, kernel_lb_addr loc, uint32_t offset, ui
		loc.logicalBlockNum + offset, ident);
}

void udf_release_data(struct buffer_head *bh)
{
	if (bh)
		brelse(bh);
}

void udf_update_tag(char *data, int length)
{
	tag *tptr = (tag *)data;
Loading