diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-08-07 23:45:42 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-08-19 10:01:34 -0700 |
commit | e3b4d43f7c233c6fce21fe4b4cb55b6d59afddae (patch) | |
tree | 4fea68166a571a4601837eab4a1e425bfe98514b /fs/f2fs/node.c | |
parent | 695facc05a3eaaf434911dc5dbbc3e6c6a4e1862 (diff) | |
download | linux-e3b4d43f7c233c6fce21fe4b4cb55b6d59afddae.tar.gz linux-e3b4d43f7c233c6fce21fe4b4cb55b6d59afddae.tar.bz2 linux-e3b4d43f7c233c6fce21fe4b4cb55b6d59afddae.zip |
f2fs: should clear the inline_xattr flag
During the recovery, we should clear the inline_xattr flag if its xattr node
block is recovered.
Reviewed-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r-- | fs/f2fs/node.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 093d7991b7ed..151045f3e7b7 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -1557,26 +1557,25 @@ void recover_inline_xattr(struct inode *inode, struct page *page) struct page *ipage; struct f2fs_inode *ri; - if (!f2fs_has_inline_xattr(inode)) - return; - if (!IS_INODE(page)) return; - ri = F2FS_INODE(page); - if (!(ri->i_inline & F2FS_INLINE_XATTR)) - return; - ipage = get_node_page(sbi, inode->i_ino); f2fs_bug_on(IS_ERR(ipage)); + ri = F2FS_INODE(page); + if (!(ri->i_inline & F2FS_INLINE_XATTR)) { + clear_inode_flag(F2FS_I(inode), FI_INLINE_XATTR); + goto update_inode; + } + dst_addr = inline_xattr_addr(ipage); src_addr = inline_xattr_addr(page); inline_size = inline_xattr_size(inode); f2fs_wait_on_page_writeback(ipage, NODE); memcpy(dst_addr, src_addr, inline_size); - +update_inode: update_inode(inode, ipage); f2fs_put_page(ipage, 1); } |