diff options
| author | Dave Chinner <dchinner@redhat.com> | 2013-04-03 16:11:30 +1100 | 
|---|---|---|
| committer | Ben Myers <bpm@sgi.com> | 2013-04-27 13:01:58 -0500 | 
| commit | 61fe135c1dde112f483bba01d645debd881b5428 (patch) | |
| tree | 6ec57ed9730f555b29b94aeb6983b4ddbebffe51 /fs/xfs/xfs_dir2_node.c | |
| parent | d75afeb3d302019527331520a2632b6614425b40 (diff) | |
| download | olio-linux-3.10-61fe135c1dde112f483bba01d645debd881b5428.tar.xz olio-linux-3.10-61fe135c1dde112f483bba01d645debd881b5428.zip  | |
xfs: buffer type overruns blf_flags field
The buffer type passed to log recvoery in the buffer log item
overruns the blf_flags field. I had assumed that flags field was a
32 bit value, and it turns out it is a unisgned short. Therefore
having 19 flags doesn't really work.
Convert the buffer type field to numeric value, and use the top 5
bits of the flags field for it. We currently have 17 types of
buffers, so using 5 bits gives us plenty of room for expansion in
future....
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_dir2_node.c')
| -rw-r--r-- | fs/xfs/xfs_dir2_node.c | 10 | 
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c index 1806a22d559..ecc6c661064 100644 --- a/fs/xfs/xfs_dir2_node.c +++ b/fs/xfs/xfs_dir2_node.c @@ -168,7 +168,7 @@ __xfs_dir3_free_read(  	/* try read returns without an error or *bpp if it lands in a hole */  	if (!err && tp && *bpp) -		xfs_trans_buf_set_type(tp, *bpp, XFS_BLF_DIR_FREE_BUF); +		xfs_trans_buf_set_type(tp, *bpp, XFS_BLFT_DIR_FREE_BUF);  	return err;  } @@ -256,7 +256,7 @@ xfs_dir3_free_get_buf(  	if (error)  		return error; -	xfs_trans_buf_set_type(tp, bp, XFS_BLF_DIR_FREE_BUF); +	xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_FREE_BUF);  	bp->b_ops = &xfs_dir3_free_buf_ops;  	/* @@ -404,7 +404,7 @@ xfs_dir2_leaf_to_node(  	else  		leaf->hdr.info.magic = cpu_to_be16(XFS_DIR3_LEAFN_MAGIC);  	lbp->b_ops = &xfs_dir3_leafn_buf_ops; -	xfs_trans_buf_set_type(tp, lbp, XFS_BLF_DIR_LEAFN_BUF); +	xfs_trans_buf_set_type(tp, lbp, XFS_BLFT_DIR_LEAFN_BUF);  	xfs_dir3_leaf_log_header(tp, lbp);  	xfs_dir3_leaf_check(mp, lbp);  	return 0; @@ -820,7 +820,7 @@ xfs_dir2_leafn_lookup_for_entry(  							(char *)curbp->b_addr);  			state->extrablk.magic = XFS_DIR2_DATA_MAGIC;  			curbp->b_ops = &xfs_dir3_data_buf_ops; -			xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF); +			xfs_trans_buf_set_type(tp, curbp, XFS_BLFT_DIR_DATA_BUF);  			if (cmp == XFS_CMP_EXACT)  				return XFS_ERROR(EEXIST);  		} @@ -835,7 +835,7 @@ xfs_dir2_leafn_lookup_for_entry(  			state->extrablk.blkno = curdb;  			state->extrablk.magic = XFS_DIR2_DATA_MAGIC;  			curbp->b_ops = &xfs_dir3_data_buf_ops; -			xfs_trans_buf_set_type(tp, curbp, XFS_BLF_DIR_DATA_BUF); +			xfs_trans_buf_set_type(tp, curbp, XFS_BLFT_DIR_DATA_BUF);  		} else {  			/* If the curbp is not the CI match block, drop it */  			if (state->extrablk.bp != curbp)  |