diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-06-19 14:08:16 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-07-06 17:40:02 -0400 |
commit | 4eeff4c9326878ff58ef6fe68d2bf22ef877e5a2 (patch) | |
tree | 5e79a2c9ddcfb213effaf2b0f60087569bf2a69e /fs/ufs | |
parent | 5336970be09becb2b59ac3812718b2cb80d33347 (diff) |
ufs_getfrag_block(): turn following indirects into a loop
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ufs')
-rw-r--r-- | fs/ufs/inode.c | 32 |
1 files changed, 8 insertions, 24 deletions
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index c05cf14ef8ff..f2d8cc2166af 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c | |||
@@ -444,37 +444,21 @@ static int ufs_getfrag_block(struct inode *inode, sector_t fragment, struct buff | |||
444 | if (depth == 1) { | 444 | if (depth == 1) { |
445 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, | 445 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, |
446 | &err, &phys, &new, bh_result->b_page); | 446 | &err, &phys, &new, bh_result->b_page); |
447 | if (phys64) { | 447 | } else { |
448 | phys64 += frag; | 448 | int i; |
449 | phys = phys64; | ||
450 | } | ||
451 | goto out; | ||
452 | } | ||
453 | if (depth == 2) { | ||
454 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, | ||
455 | &err, NULL, NULL, bh_result->b_page); | ||
456 | goto get_indirect; | ||
457 | } | ||
458 | if (depth == 3) { | ||
459 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, | 449 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, |
460 | &err, NULL, NULL, bh_result->b_page); | 450 | &err, NULL, NULL, bh_result->b_page); |
461 | goto get_double; | 451 | for (i = 1; i < depth - 1; i++) |
452 | phys64 = ufs_inode_getblock(inode, phys64, offsets[i], | ||
453 | fragment, &err, NULL, NULL, NULL); | ||
454 | phys64 = ufs_inode_getblock(inode, phys64, offsets[depth - 1], | ||
455 | fragment, &err, &phys, &new, bh_result->b_page); | ||
462 | } | 456 | } |
463 | phys64 = ufs_inode_getfrag(inode, offsets[0], fragment, | 457 | out: |
464 | &err, NULL, NULL, bh_result->b_page); | ||
465 | phys64 = ufs_inode_getblock(inode, phys64, offsets[1], | ||
466 | fragment, &err, NULL, NULL, NULL); | ||
467 | get_double: | ||
468 | phys64 = ufs_inode_getblock(inode, phys64, offsets[depth - 2], | ||
469 | fragment, &err, NULL, NULL, NULL); | ||
470 | get_indirect: | ||
471 | phys64 = ufs_inode_getblock(inode, phys64, offsets[depth - 1], | ||
472 | fragment, &err, &phys, &new, bh_result->b_page); | ||
473 | if (phys64) { | 458 | if (phys64) { |
474 | phys64 += frag; | 459 | phys64 += frag; |
475 | phys = phys64; | 460 | phys = phys64; |
476 | } | 461 | } |
477 | out: | ||
478 | if (err) | 462 | if (err) |
479 | goto abort; | 463 | goto abort; |
480 | if (new) | 464 | if (new) |