aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/inode.c')
-rw-r--r--fs/f2fs/inode.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 5528801a5baf..2adeff26be11 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -138,7 +138,8 @@ static int do_read_inode(struct inode *inode)
138 fi->i_pino = le32_to_cpu(ri->i_pino); 138 fi->i_pino = le32_to_cpu(ri->i_pino);
139 fi->i_dir_level = ri->i_dir_level; 139 fi->i_dir_level = ri->i_dir_level;
140 140
141 f2fs_init_extent_tree(inode, &ri->i_ext); 141 if (f2fs_init_extent_tree(inode, &ri->i_ext))
142 set_page_dirty(node_page);
142 143
143 get_inline_info(fi, ri); 144 get_inline_info(fi, ri);
144 145
@@ -222,7 +223,7 @@ bad_inode:
222 return ERR_PTR(ret); 223 return ERR_PTR(ret);
223} 224}
224 225
225void update_inode(struct inode *inode, struct page *node_page) 226int update_inode(struct inode *inode, struct page *node_page)
226{ 227{
227 struct f2fs_inode *ri; 228 struct f2fs_inode *ri;
228 229
@@ -260,15 +261,16 @@ void update_inode(struct inode *inode, struct page *node_page)
260 261
261 __set_inode_rdev(inode, ri); 262 __set_inode_rdev(inode, ri);
262 set_cold_node(inode, node_page); 263 set_cold_node(inode, node_page);
263 set_page_dirty(node_page);
264
265 clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE); 264 clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE);
265
266 return set_page_dirty(node_page);
266} 267}
267 268
268void update_inode_page(struct inode *inode) 269int update_inode_page(struct inode *inode)
269{ 270{
270 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 271 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
271 struct page *node_page; 272 struct page *node_page;
273 int ret = 0;
272retry: 274retry:
273 node_page = get_node_page(sbi, inode->i_ino); 275 node_page = get_node_page(sbi, inode->i_ino);
274 if (IS_ERR(node_page)) { 276 if (IS_ERR(node_page)) {
@@ -279,10 +281,11 @@ retry:
279 } else if (err != -ENOENT) { 281 } else if (err != -ENOENT) {
280 f2fs_stop_checkpoint(sbi); 282 f2fs_stop_checkpoint(sbi);
281 } 283 }
282 return; 284 return 0;
283 } 285 }
284 update_inode(inode, node_page); 286 ret = update_inode(inode, node_page);
285 f2fs_put_page(node_page, 1); 287 f2fs_put_page(node_page, 1);
288 return ret;
286} 289}
287 290
288int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc) 291int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
@@ -300,9 +303,8 @@ int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
300 * We need to balance fs here to prevent from producing dirty node pages 303 * We need to balance fs here to prevent from producing dirty node pages
301 * during the urgent cleaning time when runing out of free sections. 304 * during the urgent cleaning time when runing out of free sections.
302 */ 305 */
303 update_inode_page(inode); 306 if (update_inode_page(inode))
304 307 f2fs_balance_fs(sbi, true);
305 f2fs_balance_fs(sbi);
306 return 0; 308 return 0;
307} 309}
308 310
@@ -328,7 +330,7 @@ void f2fs_evict_inode(struct inode *inode)
328 goto out_clear; 330 goto out_clear;
329 331
330 f2fs_bug_on(sbi, get_dirty_pages(inode)); 332 f2fs_bug_on(sbi, get_dirty_pages(inode));
331 remove_dirty_dir_inode(inode); 333 remove_dirty_inode(inode);
332 334
333 f2fs_destroy_extent_tree(inode); 335 f2fs_destroy_extent_tree(inode);
334 336
@@ -358,9 +360,9 @@ no_delete:
358 if (xnid) 360 if (xnid)
359 invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid); 361 invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid);
360 if (is_inode_flag_set(fi, FI_APPEND_WRITE)) 362 if (is_inode_flag_set(fi, FI_APPEND_WRITE))
361 add_dirty_inode(sbi, inode->i_ino, APPEND_INO); 363 add_ino_entry(sbi, inode->i_ino, APPEND_INO);
362 if (is_inode_flag_set(fi, FI_UPDATE_WRITE)) 364 if (is_inode_flag_set(fi, FI_UPDATE_WRITE))
363 add_dirty_inode(sbi, inode->i_ino, UPDATE_INO); 365 add_ino_entry(sbi, inode->i_ino, UPDATE_INO);
364 if (is_inode_flag_set(fi, FI_FREE_NID)) { 366 if (is_inode_flag_set(fi, FI_FREE_NID)) {
365 if (err && err != -ENOENT) 367 if (err && err != -ENOENT)
366 alloc_nid_done(sbi, inode->i_ino); 368 alloc_nid_done(sbi, inode->i_ino);