]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - fs/reiserfs/xattr.c
reiserfs: propagate errors from fill_with_dentries() properly
[mirror_ubuntu-bionic-kernel.git] / fs / reiserfs / xattr.c
index 8fb367c5bdd7529cf6ebe6e526f3971431612505..d6e958a223ec23c837f920ec7584e2d83cd8530e 100644 (file)
@@ -185,6 +185,7 @@ struct reiserfs_dentry_buf {
        struct dir_context ctx;
        struct dentry *xadir;
        int count;
+       int err;
        struct dentry *dentries[8];
 };
 
@@ -207,6 +208,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
 
        dentry = lookup_one_len(name, dbuf->xadir, namelen);
        if (IS_ERR(dentry)) {
+               dbuf->err = PTR_ERR(dentry);
                return PTR_ERR(dentry);
        } else if (d_really_is_negative(dentry)) {
                /* A directory entry exists, but no file? */
@@ -215,6 +217,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
                               "not found for file %pd.\n",
                               dentry, dbuf->xadir);
                dput(dentry);
+               dbuf->err = -EIO;
                return -EIO;
        }
 
@@ -262,6 +265,10 @@ static int reiserfs_for_each_xattr(struct inode *inode,
                err = reiserfs_readdir_inode(d_inode(dir), &buf.ctx);
                if (err)
                        break;
+               if (buf.err) {
+                       err = buf.err;
+                       break;
+               }
                if (!buf.count)
                        break;
                for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) {