]> git.ipfire.org Git - people/ms/linux.git/blobdiff - fs/namei.c
lookup_fast(): don't bother with inode
[people/ms/linux.git] / fs / namei.c
index d631d797ea0945875ffb7c7e9be89a34439753d4..3e30cec54ced7f7323ee2d9b3f14d945f0800e9d 100644 (file)
@@ -1621,8 +1621,7 @@ static struct dentry *__lookup_hash(const struct qstr *name,
        return dentry;
 }
 
-static struct dentry *lookup_fast(struct nameidata *nd,
-                                 struct inode **inode)
+static struct dentry *lookup_fast(struct nameidata *nd)
 {
        struct dentry *dentry, *parent = nd->path.dentry;
        int status = 1;
@@ -1640,22 +1639,11 @@ static struct dentry *lookup_fast(struct nameidata *nd,
                        return NULL;
                }
 
-               /*
-                * This sequence count validates that the inode matches
-                * the dentry name information from lookup.
-                */
-               *inode = d_backing_inode(dentry);
-               if (read_seqcount_retry(&dentry->d_seq, nd->next_seq))
-                       return ERR_PTR(-ECHILD);
-
                /*
                 * This sequence count validates that the parent had no
                 * changes while we did the lookup of the dentry above.
-                *
-                * The memory barrier in read_seqcount_begin of child is
-                *  enough, we can use __read_seqcount_retry here.
                 */
-               if (__read_seqcount_retry(&parent->d_seq, nd->seq))
+               if (read_seqcount_retry(&parent->d_seq, nd->seq))
                        return ERR_PTR(-ECHILD);
 
                status = d_revalidate(dentry, nd->flags);
@@ -1997,7 +1985,6 @@ static const char *handle_dots(struct nameidata *nd, int type)
 static const char *walk_component(struct nameidata *nd, int flags)
 {
        struct dentry *dentry;
-       struct inode *inode;
        /*
         * "." and ".." are special - ".." especially so because it has
         * to be able to know about the current root directory and
@@ -2008,7 +1995,7 @@ static const char *walk_component(struct nameidata *nd, int flags)
                        put_link(nd);
                return handle_dots(nd, nd->last_type);
        }
-       dentry = lookup_fast(nd, &inode);
+       dentry = lookup_fast(nd);
        if (IS_ERR(dentry))
                return ERR_CAST(dentry);
        if (unlikely(!dentry)) {
@@ -3396,7 +3383,6 @@ static const char *open_last_lookups(struct nameidata *nd,
        struct dentry *dir = nd->path.dentry;
        int open_flag = op->open_flag;
        bool got_write = false;
-       struct inode *inode;
        struct dentry *dentry;
        const char *res;
 
@@ -3412,7 +3398,7 @@ static const char *open_last_lookups(struct nameidata *nd,
                if (nd->last.name[nd->last.len])
                        nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
                /* we _can_ be in RCU mode here */
-               dentry = lookup_fast(nd, &inode);
+               dentry = lookup_fast(nd);
                if (IS_ERR(dentry))
                        return ERR_CAST(dentry);
                if (likely(dentry))