summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorFan Li <fanofcode.li@samsung.com>2017-03-08 06:39:16 +0100
committerJaegeuk Kim <jaegeuk@kernel.org>2017-03-22 03:34:27 +0100
commit8a6aa32502549b1f15f0a28e3d2fcc5edabc3f19 (patch)
tree04c60f06bb57e2282da0239973ec3aaf5001805f /fs
parentf2fs: add fault injection on f2fs_truncate (diff)
downloadlinux-8a6aa32502549b1f15f0a28e3d2fcc5edabc3f19.tar.xz
linux-8a6aa32502549b1f15f0a28e3d2fcc5edabc3f19.zip
f2fs: adjust the way of calculating nat block
use a slightly simpler expression to calculate nat block with nid. Signed-off-by: Fan Li <fanofcode.li@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/f2fs/node.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 2f9603fa85a5..ebed0240aa53 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -200,13 +200,16 @@ static inline pgoff_t current_nat_addr(struct f2fs_sb_info *sbi, nid_t start)
struct f2fs_nm_info *nm_i = NM_I(sbi);
pgoff_t block_off;
pgoff_t block_addr;
- int seg_off;
+ /*
+ * block_off = segment_off * 512 + off_in_segment
+ * OLD = (segment_off * 512) * 2 + off_in_segment
+ * NEW = 2 * (segment_off * 512 + off_in_segment) - off_in_segment
+ */
block_off = NAT_BLOCK_OFFSET(start);
- seg_off = block_off >> sbi->log_blocks_per_seg;
block_addr = (pgoff_t)(nm_i->nat_blkaddr +
- (seg_off << sbi->log_blocks_per_seg << 1) +
+ (block_off << 1) -
(block_off & (sbi->blocks_per_seg - 1)));
if (f2fs_test_bit(block_off, nm_i->nat_bitmap))