Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

f2fs: introduce f2fs_i_blocks_write with mark_inode_dirty_sync

This patch introduces f2fs_i_blocks_write() to call mark_inode_dirty_sync() when
changing inode->i_blocks.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

+13 -5
-1
fs/f2fs/data.c
··· 344 344 if (set_page_dirty(dn->node_page)) 345 345 dn->node_changed = true; 346 346 347 - mark_inode_dirty(dn->inode); 348 347 sync_inode_page(dn); 349 348 return 0; 350 349 }
+13 -4
fs/f2fs/f2fs.h
··· 1119 1119 return ofs == XATTR_NODE_OFFSET; 1120 1120 } 1121 1121 1122 + static inline void f2fs_i_blocks_write(struct inode *, blkcnt_t, bool); 1122 1123 static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi, 1123 1124 struct inode *inode, blkcnt_t *count) 1124 1125 { ··· 1142 1141 } 1143 1142 } 1144 1143 /* *count can be recalculated */ 1145 - inode->i_blocks += *count; 1144 + f2fs_i_blocks_write(inode, *count, true); 1146 1145 sbi->total_valid_block_count = 1147 1146 sbi->total_valid_block_count + (block_t)(*count); 1148 1147 spin_unlock(&sbi->stat_lock); ··· 1158 1157 spin_lock(&sbi->stat_lock); 1159 1158 f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count); 1160 1159 f2fs_bug_on(sbi, inode->i_blocks < count); 1161 - inode->i_blocks -= count; 1160 + f2fs_i_blocks_write(inode, count, false); 1162 1161 sbi->total_valid_block_count -= (block_t)count; 1163 1162 spin_unlock(&sbi->stat_lock); 1164 1163 } ··· 1295 1294 } 1296 1295 1297 1296 if (inode) 1298 - inode->i_blocks++; 1297 + f2fs_i_blocks_write(inode, 1, true); 1299 1298 1300 1299 sbi->total_valid_node_count++; 1301 1300 sbi->total_valid_block_count++; ··· 1314 1313 f2fs_bug_on(sbi, !sbi->total_valid_node_count); 1315 1314 f2fs_bug_on(sbi, !inode->i_blocks); 1316 1315 1317 - inode->i_blocks--; 1316 + f2fs_i_blocks_write(inode, 1, false); 1318 1317 sbi->total_valid_node_count--; 1319 1318 sbi->total_valid_block_count--; 1320 1319 ··· 1555 1554 { 1556 1555 F2FS_I(inode)->i_acl_mode = mode; 1557 1556 set_inode_flag(inode, FI_ACL_MODE); 1557 + } 1558 + 1559 + static inline void f2fs_i_blocks_write(struct inode *inode, 1560 + blkcnt_t diff, bool add) 1561 + { 1562 + inode->i_blocks = add ? inode->i_blocks + diff : 1563 + inode->i_blocks - diff; 1564 + mark_inode_dirty_sync(inode); 1558 1565 } 1559 1566 1560 1567 static inline void f2fs_i_size_write(struct inode *inode, loff_t i_size)