reiserfs: is_privroot_deh() needs only directory inode, actually
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 18 May 2013 02:45:29 +0000 (22:45 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 29 Jun 2013 08:56:50 +0000 (12:56 +0400)
... and that - only to get the superblock.  Privroot is a directory
and we don't allow hardlinks to those...

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

index cba70165e9c566719dc585f5fbb76c4d2b1f4915..df25fff3714a8dbfdab7d9c43a34d27da02942d0 100644 (file)
@@ -50,11 +50,10 @@ static int reiserfs_dir_fsync(struct file *filp, loff_t start, loff_t end,
 
 #define store_ih(where,what) copy_item_head (where, what)
 
-static inline bool is_privroot_deh(struct dentry *dir,
-                                  struct reiserfs_de_head *deh)
+static inline bool is_privroot_deh(struct inode *dir, struct reiserfs_de_head *deh)
 {
-       struct dentry *privroot = REISERFS_SB(dir->d_sb)->priv_root;
-       return (dir == dir->d_parent && privroot->d_inode &&
+       struct dentry *privroot = REISERFS_SB(dir->i_sb)->priv_root;
+       return (privroot->d_inode &&
                deh->deh_objectid == INODE_PKEY(privroot->d_inode)->k_objectid);
 }
 
@@ -153,7 +152,7 @@ int reiserfs_readdir_dentry(struct dentry *dentry, struct dir_context *ctx)
                                }
 
                                /* Ignore the .reiserfs_priv entry */
-                               if (is_privroot_deh(dentry, deh))
+                               if (is_privroot_deh(inode, deh))
                                        continue;
 
                                ctx->pos = deh_offset(deh);