]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/f2fs/xattr.c
Merge tag 'mips_5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux
[linux.git] / fs / f2fs / xattr.c
index e791741d193b8b3623c3be613ebd61f432631e7c..181900af2576ba535042642856b8485a9b667ad6 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/posix_acl_xattr.h>
 #include "f2fs.h"
 #include "xattr.h"
+#include "segment.h"
 
 static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
                struct dentry *unused, struct inode *inode,
@@ -346,7 +347,10 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 
        *xe = __find_xattr(cur_addr, last_txattr_addr, index, len, name);
        if (!*xe) {
-               err = -EFAULT;
+               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;
        }
 check:
@@ -622,7 +626,10 @@ 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) {
-               error = -EFAULT;
+               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;
        }
 
@@ -723,6 +730,11 @@ int f2fs_setxattr(struct inode *inode, int index, const char *name,
        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
        int err;
 
+       if (unlikely(f2fs_cp_error(sbi)))
+               return -EIO;
+       if (!f2fs_is_checkpoint_ready(sbi))
+               return -ENOSPC;
+
        err = dquot_initialize(inode);
        if (err)
                return err;