|
@@ -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++) {
|