diff options
-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) | |||
1557 | struct page *ipage; | 1557 | struct page *ipage; |
1558 | struct f2fs_inode *ri; | 1558 | struct f2fs_inode *ri; |
1559 | 1559 | ||
1560 | if (!f2fs_has_inline_xattr(inode)) | ||
1561 | return; | ||
1562 | |||
1563 | if (!IS_INODE(page)) | 1560 | if (!IS_INODE(page)) |
1564 | return; | 1561 | return; |
1565 | 1562 | ||
1566 | ri = F2FS_INODE(page); | ||
1567 | if (!(ri->i_inline & F2FS_INLINE_XATTR)) | ||
1568 | return; | ||
1569 | |||
1570 | ipage = get_node_page(sbi, inode->i_ino); | 1563 | ipage = get_node_page(sbi, inode->i_ino); |
1571 | f2fs_bug_on(IS_ERR(ipage)); | 1564 | f2fs_bug_on(IS_ERR(ipage)); |
1572 | 1565 | ||
1566 | ri = F2FS_INODE(page); | ||
1567 | if (!(ri->i_inline & F2FS_INLINE_XATTR)) { | ||
1568 | clear_inode_flag(F2FS_I(inode), FI_INLINE_XATTR); | ||
1569 | goto update_inode; | ||
1570 | } | ||
1571 | |||
1573 | dst_addr = inline_xattr_addr(ipage); | 1572 | dst_addr = inline_xattr_addr(ipage); |
1574 | src_addr = inline_xattr_addr(page); | 1573 | src_addr = inline_xattr_addr(page); |
1575 | inline_size = inline_xattr_size(inode); | 1574 | inline_size = inline_xattr_size(inode); |
1576 | 1575 | ||
1577 | f2fs_wait_on_page_writeback(ipage, NODE); | 1576 | f2fs_wait_on_page_writeback(ipage, NODE); |
1578 | memcpy(dst_addr, src_addr, inline_size); | 1577 | memcpy(dst_addr, src_addr, inline_size); |
1579 | 1578 | update_inode: | |
1580 | update_inode(inode, ipage); | 1579 | update_inode(inode, ipage); |
1581 | f2fs_put_page(ipage, 1); | 1580 | f2fs_put_page(ipage, 1); |
1582 | } | 1581 | } |