aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/inline.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/inline.c')
-rw-r--r--fs/f2fs/inline.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index d636cbcf68f2..bb6a152310ef 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -298,7 +298,7 @@ process_inline:
298 clear_inode_flag(inode, FI_INLINE_DATA); 298 clear_inode_flag(inode, FI_INLINE_DATA);
299 f2fs_put_page(ipage, 1); 299 f2fs_put_page(ipage, 1);
300 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) { 300 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
301 if (f2fs_truncate_blocks(inode, 0, false, false)) 301 if (f2fs_truncate_blocks(inode, 0, false))
302 return false; 302 return false;
303 goto process_inline; 303 goto process_inline;
304 } 304 }
@@ -470,7 +470,7 @@ static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry)
470 return 0; 470 return 0;
471punch_dentry_pages: 471punch_dentry_pages:
472 truncate_inode_pages(&dir->i_data, 0); 472 truncate_inode_pages(&dir->i_data, 0);
473 f2fs_truncate_blocks(dir, 0, false, false); 473 f2fs_truncate_blocks(dir, 0, false);
474 f2fs_remove_dirty_inode(dir); 474 f2fs_remove_dirty_inode(dir);
475 return err; 475 return err;
476} 476}
@@ -659,6 +659,12 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
659 if (IS_ERR(ipage)) 659 if (IS_ERR(ipage))
660 return PTR_ERR(ipage); 660 return PTR_ERR(ipage);
661 661
662 /*
663 * f2fs_readdir was protected by inode.i_rwsem, it is safe to access
664 * ipage without page's lock held.
665 */
666 unlock_page(ipage);
667
662 inline_dentry = inline_data_addr(inode, ipage); 668 inline_dentry = inline_data_addr(inode, ipage);
663 669
664 make_dentry_ptr_inline(inode, &d, inline_dentry); 670 make_dentry_ptr_inline(inode, &d, inline_dentry);
@@ -667,7 +673,7 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
667 if (!err) 673 if (!err)
668 ctx->pos = d.max; 674 ctx->pos = d.max;
669 675
670 f2fs_put_page(ipage, 1); 676 f2fs_put_page(ipage, 0);
671 return err < 0 ? err : 0; 677 return err < 0 ? err : 0;
672} 678}
673 679