reiserfs: switch reiserfs_readdir_dentry to inode
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 18 May 2013 02:58:58 +0000 (22:58 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 29 Jun 2013 08:56:51 +0000 (12:56 +0400)
... and clean the callers up a bit

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/reiserfs/dir.c
fs/reiserfs/reiserfs.h
fs/reiserfs/xattr.c

index df25fff3714a8dbfdab7d9c43a34d27da02942d0..03e4ca5624d6057f90c8230a2c6d89cac0fcd96f 100644 (file)
@@ -57,9 +57,8 @@ static inline bool is_privroot_deh(struct inode *dir, struct reiserfs_de_head *d
                deh->deh_objectid == INODE_PKEY(privroot->d_inode)->k_objectid);
 }
 
-int reiserfs_readdir_dentry(struct dentry *dentry, struct dir_context *ctx)
+int reiserfs_readdir_inode(struct inode *inode, struct dir_context *ctx)
 {
-       struct inode *inode = dentry->d_inode;
        struct cpu_key pos_key; /* key of current position in the directory (key of directory entry) */
        INITIALIZE_PATH(path_to_entry);
        struct buffer_head *bh;
@@ -243,7 +242,7 @@ out:
 
 static int reiserfs_readdir(struct file *file, struct dir_context *ctx)
 {
-       return reiserfs_readdir_dentry(file->f_path.dentry, ctx);
+       return reiserfs_readdir_inode(file_inode(file), ctx);
 }
 
 /* compose directory item containing "." and ".." entries (entries are
index 27e0ba0003346261196fc7e4ecb7d88b184f5786..3df5ce6c724d5bbafc27e655fc30870a5f35c6e1 100644 (file)
@@ -2709,7 +2709,7 @@ extern const struct inode_operations reiserfs_dir_inode_operations;
 extern const struct inode_operations reiserfs_symlink_inode_operations;
 extern const struct inode_operations reiserfs_special_inode_operations;
 extern const struct file_operations reiserfs_dir_operations;
-int reiserfs_readdir_dentry(struct dentry *, struct dir_context *);
+int reiserfs_readdir_inode(struct inode *, struct dir_context *);
 
 /* tail_conversion.c */
 int direct2indirect(struct reiserfs_transaction_handle *, struct inode *,
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)