f2fs: set SBI_NEED_FSCK for xattr corruption case
authorChao Yu <yuchao0@huawei.com>
Thu, 20 Jun 2019 03:36:15 +0000 (11:36 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 2 Jul 2019 22:40:41 +0000 (15:40 -0700)
If xattr is corrupted, let's print kernel message and set SBI_NEED_FSCK
for further repair.

Reported-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/xattr.c

index 9632420186636dc0e2a8f057513a1dea0b539efe..b32c456216790e1bdf7c86c73e385a821ff905fd 100644 (file)
@@ -346,6 +346,9 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 
        *xe = __find_xattr(cur_addr, last_txattr_addr, index, len, name);
        if (!*xe) {
+               f2fs_err(F2FS_I_SB(inode), "inode (%lu) has corrupted xattr",
+                                                               inode->i_ino);
+               set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
                err = -EFSCORRUPTED;
                goto out;
        }
@@ -622,6 +625,9 @@ static int __f2fs_setxattr(struct inode *inode, int index,
        /* find entry with wanted name. */
        here = __find_xattr(base_addr, last_base_addr, index, len, name);
        if (!here) {
+               f2fs_err(F2FS_I_SB(inode), "inode (%lu) has corrupted xattr",
+                                                               inode->i_ino);
+               set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
                error = -EFSCORRUPTED;
                goto exit;
        }