Skip to content

Commit

Permalink
ufs_getfrag_block(): get rid of macro jungles
Browse files Browse the repository at this point in the history
Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
Al Viro committed Jul 6, 2015
1 parent bbb3eb9 commit 8d9dcf1
Showing 1 changed file with 22 additions and 29 deletions.
51 changes: 22 additions & 29 deletions fs/ufs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -465,49 +465,42 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff
err = 0;
ptr = fragment;

/*
* ok, these macros clean the logic up a bit and make
* it much more readable:
*/
#define GET_INODE_DATABLOCK(x) \
ufs_inode_getfrag(inode, x, fragment, 1, &err, &phys, &new,\
bh_result->b_page)
#define GET_INODE_PTR(x) \
ufs_inode_getfrag(inode, x, fragment, uspi->s_fpb, &err, NULL, NULL,\
bh_result->b_page)
#define GET_INDIRECT_DATABLOCK(x) \
ufs_inode_getblock(inode, bh, x, fragment, \
&err, &phys, &new, bh_result->b_page)
#define GET_INDIRECT_PTR(x) \
ufs_inode_getblock(inode, bh, x, fragment, \
&err, NULL, NULL, NULL)

if (depth == 1) {
bh = GET_INODE_DATABLOCK(ptr);
bh = ufs_inode_getfrag(inode, ptr, fragment, 1, &err, &phys,
&new, bh_result->b_page);
goto out;
}
ptr -= UFS_NDIR_FRAGMENT;
if (depth == 2) {
bh = GET_INODE_PTR(UFS_IND_FRAGMENT + (ptr >> uspi->s_apbshift));
bh = ufs_inode_getfrag(inode,
UFS_IND_FRAGMENT + (ptr >> uspi->s_apbshift),
fragment, uspi->s_fpb, &err, NULL, NULL,
bh_result->b_page);
goto get_indirect;
}
ptr -= 1 << (uspi->s_apbshift + uspi->s_fpbshift);
if (depth == 3) {
bh = GET_INODE_PTR(UFS_DIND_FRAGMENT + (ptr >> uspi->s_2apbshift));
bh = ufs_inode_getfrag(inode,
UFS_DIND_FRAGMENT + (ptr >> uspi->s_2apbshift),
fragment, uspi->s_fpb, &err, NULL, NULL,
bh_result->b_page);
goto get_double;
}
ptr -= 1 << (uspi->s_2apbshift + uspi->s_fpbshift);
bh = GET_INODE_PTR(UFS_TIND_FRAGMENT + (ptr >> uspi->s_3apbshift));
bh = GET_INDIRECT_PTR((ptr >> uspi->s_2apbshift) & uspi->s_apbmask);
bh = ufs_inode_getfrag(inode,
UFS_TIND_FRAGMENT + (ptr >> uspi->s_3apbshift),
fragment, uspi->s_fpb, &err, NULL, NULL,
bh_result->b_page);
bh = ufs_inode_getblock(inode, bh,
(ptr >> uspi->s_2apbshift) & uspi->s_apbmask,
fragment, &err, NULL, NULL, NULL);
get_double:
bh = GET_INDIRECT_PTR((ptr >> uspi->s_apbshift) & uspi->s_apbmask);
bh = ufs_inode_getblock(inode, bh,
(ptr >> uspi->s_apbshift) & uspi->s_apbmask,
fragment, &err, NULL, NULL, NULL);
get_indirect:
bh = GET_INDIRECT_DATABLOCK(ptr & uspi->s_apbmask);

#undef GET_INODE_DATABLOCK
#undef GET_INODE_PTR
#undef GET_INDIRECT_DATABLOCK
#undef GET_INDIRECT_PTR
bh = ufs_inode_getblock(inode, bh, ptr & uspi->s_apbmask, fragment,
&err, &phys, &new, bh_result->b_page);

out:
if (err)
Expand Down

0 comments on commit 8d9dcf1

Please sign in to comment.