aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/reiserfs/xattr.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
index 48cdfc81fe10..32d8986c26fb 100644
--- a/fs/reiserfs/xattr.c
+++ b/fs/reiserfs/xattr.c
@@ -185,6 +185,7 @@ struct reiserfs_dentry_buf {
185 struct dir_context ctx; 185 struct dir_context ctx;
186 struct dentry *xadir; 186 struct dentry *xadir;
187 int count; 187 int count;
188 int err;
188 struct dentry *dentries[8]; 189 struct dentry *dentries[8];
189}; 190};
190 191
@@ -207,6 +208,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
207 208
208 dentry = lookup_one_len(name, dbuf->xadir, namelen); 209 dentry = lookup_one_len(name, dbuf->xadir, namelen);
209 if (IS_ERR(dentry)) { 210 if (IS_ERR(dentry)) {
211 dbuf->err = PTR_ERR(dentry);
210 return PTR_ERR(dentry); 212 return PTR_ERR(dentry);
211 } else if (d_really_is_negative(dentry)) { 213 } else if (d_really_is_negative(dentry)) {
212 /* A directory entry exists, but no file? */ 214 /* A directory entry exists, but no file? */
@@ -215,6 +217,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
215 "not found for file %pd.\n", 217 "not found for file %pd.\n",
216 dentry, dbuf->xadir); 218 dentry, dbuf->xadir);
217 dput(dentry); 219 dput(dentry);
220 dbuf->err = -EIO;
218 return -EIO; 221 return -EIO;
219 } 222 }
220 223
@@ -262,6 +265,10 @@ static int reiserfs_for_each_xattr(struct inode *inode,
262 err = reiserfs_readdir_inode(d_inode(dir), &buf.ctx); 265 err = reiserfs_readdir_inode(d_inode(dir), &buf.ctx);
263 if (err) 266 if (err)
264 break; 267 break;
268 if (buf.err) {
269 err = buf.err;
270 break;
271 }
265 if (!buf.count) 272 if (!buf.count)
266 break; 273 break;
267 for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) { 274 for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) {