]> Pileus Git - ~andy/linux/blobdiff - fs/reiserfs/xattr.c
reiserfs: switch reiserfs_readdir_dentry to inode
[~andy/linux] / fs / reiserfs / xattr.c
index 26648a451e87eddb99aa4214be53f2d0465dc435..c69cdd749f09b98b702c103062262c38b92606e1 100644 (file)
@@ -249,28 +249,27 @@ static int reiserfs_for_each_xattr(struct inode *inode,
        reiserfs_write_lock(inode->i_sb);
 
        buf.xadir = dir;
-       err = reiserfs_readdir_dentry(dir, &buf.ctx);
-       while ((err == 0 || err == -ENOSPC) && buf.count) {
-               err = 0;
-
-               for (i = 0; i < buf.count && buf.dentries[i]; i++) {
-                       int lerr = 0;
+       while (1) {
+               err = reiserfs_readdir_inode(dir->d_inode, &buf.ctx);
+               if (err)
+                       break;
+               if (!buf.count)
+                       break;
+               for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) {
                        struct dentry *dentry = buf.dentries[i];
 
-                       if (err == 0 && !S_ISDIR(dentry->d_inode->i_mode))
-                               lerr = action(dentry, data);
+                       if (!S_ISDIR(dentry->d_inode->i_mode))
+                               err = action(dentry, data);
 
                        dput(dentry);
                        buf.dentries[i] = NULL;
-                       err = lerr ?: err;
                }
+               if (err)
+                       break;
                buf.count = 0;
-               if (!err)
-                       err = reiserfs_readdir_dentry(dir, &buf.ctx);
        }
        mutex_unlock(&dir->d_inode->i_mutex);
 
-       /* Clean up after a failed readdir */
        cleanup_dentry_buf(&buf);
 
        if (!err) {
@@ -868,7 +867,7 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size)
        }
 
        mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_XATTR);
-       err = reiserfs_readdir_dentry(dir, &buf.ctx);
+       err = reiserfs_readdir_inode(dir->d_inode, &buf.ctx);
        mutex_unlock(&dir->d_inode->i_mutex);
 
        if (!err)