lustre: switch to use of ->d_init()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 15 Oct 2016 23:09:13 +0000 (19:09 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 15 Oct 2016 23:09:13 +0000 (19:09 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/staging/lustre/lustre/llite/dcache.c
drivers/staging/lustre/lustre/llite/llite_internal.h
drivers/staging/lustre/lustre/llite/llite_nfs.c
drivers/staging/lustre/lustre/llite/namei.c
drivers/staging/lustre/lustre/llite/statahead.c

index 0e45d8f..65bf0c4 100644 (file)
@@ -57,9 +57,6 @@ static void ll_release(struct dentry *de)
 
        LASSERT(de);
        lld = ll_d2d(de);
-       if (!lld) /* NFS copies the de->d_op methods (bug 4655) */
-               return;
-
        if (lld->lld_it) {
                ll_intent_release(lld->lld_it);
                kfree(lld->lld_it);
@@ -126,30 +123,13 @@ static int ll_ddelete(const struct dentry *de)
        return 0;
 }
 
-int ll_d_init(struct dentry *de)
+static int ll_d_init(struct dentry *de)
 {
-       CDEBUG(D_DENTRY, "ldd on dentry %pd (%p) parent %p inode %p refc %d\n",
-              de, de, de->d_parent, d_inode(de), d_count(de));
-
-       if (!de->d_fsdata) {
-               struct ll_dentry_data *lld;
-
-               lld = kzalloc(sizeof(*lld), GFP_NOFS);
-               if (likely(lld)) {
-                       spin_lock(&de->d_lock);
-                       if (likely(!de->d_fsdata)) {
-                               de->d_fsdata = lld;
-                               __d_lustre_invalidate(de);
-                       } else {
-                               kfree(lld);
-                       }
-                       spin_unlock(&de->d_lock);
-               } else {
-                       return -ENOMEM;
-               }
-       }
-       LASSERT(de->d_op == &ll_d_ops);
-
+       struct ll_dentry_data *lld = kzalloc(sizeof(*lld), GFP_KERNEL);
+       if (unlikely(!lld))
+               return -ENOMEM;
+       lld->lld_invalid = 1;
+       de->d_fsdata = lld;
        return 0;
 }
 
@@ -300,6 +280,7 @@ static int ll_revalidate_nd(struct dentry *dentry, unsigned int flags)
 }
 
 const struct dentry_operations ll_d_ops = {
+       .d_init = ll_d_init,
        .d_revalidate = ll_revalidate_nd,
        .d_release = ll_release,
        .d_delete  = ll_ddelete,
index 4bc5512..507c603 100644 (file)
@@ -801,7 +801,6 @@ int ll_hsm_release(struct inode *inode);
 
 /* llite/dcache.c */
 
-int ll_d_init(struct dentry *de);
 extern const struct dentry_operations ll_d_ops;
 void ll_intent_drop_lock(struct lookup_intent *);
 void ll_intent_release(struct lookup_intent *);
@@ -1189,7 +1188,7 @@ dentry_may_statahead(struct inode *dir, struct dentry *dentry)
         * 'lld_sa_generation == lli->lli_sa_generation'.
         */
        ldd = ll_d2d(dentry);
-       if (ldd && ldd->lld_sa_generation == lli->lli_sa_generation)
+       if (ldd->lld_sa_generation == lli->lli_sa_generation)
                return false;
 
        return true;
@@ -1317,17 +1316,7 @@ static inline void ll_set_lock_data(struct obd_export *exp, struct inode *inode,
 
 static inline int d_lustre_invalid(const struct dentry *dentry)
 {
-       struct ll_dentry_data *lld = ll_d2d(dentry);
-
-       return !lld || lld->lld_invalid;
-}
-
-static inline void __d_lustre_invalidate(struct dentry *dentry)
-{
-       struct ll_dentry_data *lld = ll_d2d(dentry);
-
-       if (lld)
-               lld->lld_invalid = 1;
+       return ll_d2d(dentry)->lld_invalid;
 }
 
 /*
@@ -1343,7 +1332,7 @@ static inline void d_lustre_invalidate(struct dentry *dentry, int nested)
 
        spin_lock_nested(&dentry->d_lock,
                         nested ? DENTRY_D_LOCK_NESTED : DENTRY_D_LOCK_NORMAL);
-       __d_lustre_invalidate(dentry);
+       ll_d2d(dentry)->lld_invalid = 1;
        /*
         * We should be careful about dentries created by d_obtain_alias().
         * These dentries are not put in the dentry tree, instead they are
index 7092305..2ad9dc2 100644 (file)
@@ -169,22 +169,12 @@ ll_iget_for_nfs(struct super_block *sb, struct lu_fid *fid, struct lu_fid *paren
        /* N.B. d_obtain_alias() drops inode ref on error */
        result = d_obtain_alias(inode);
        if (!IS_ERR(result)) {
-               int rc;
-
-               rc = ll_d_init(result);
-               if (rc < 0) {
-                       dput(result);
-                       result = ERR_PTR(rc);
-               } else {
-                       struct ll_dentry_data *ldd = ll_d2d(result);
-
-                       /*
-                        * Need to signal to the ll_intent_file_open that
-                        * we came from NFS and so opencache needs to be
-                        * enabled for this one
-                        */
-                       ldd->lld_nfs_dentry = 1;
-               }
+               /*
+                * Need to signal to the ll_intent_file_open that
+                * we came from NFS and so opencache needs to be
+                * enabled for this one
+                */
+               ll_d2d(result)->lld_nfs_dentry = 1;
        }
 
        return result;
index 180f35e..31a7713 100644 (file)
@@ -395,17 +395,9 @@ static struct dentry *ll_find_alias(struct inode *inode, struct dentry *dentry)
  */
 struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
 {
-       struct dentry *new;
-       int rc;
-
        if (inode) {
-               new = ll_find_alias(inode, de);
+               struct dentry *new = ll_find_alias(inode, de);
                if (new) {
-                       rc = ll_d_init(new);
-                       if (rc < 0) {
-                               dput(new);
-                               return ERR_PTR(rc);
-                       }
                        d_move(new, de);
                        iput(inode);
                        CDEBUG(D_DENTRY,
@@ -414,9 +406,6 @@ struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
                        return new;
                }
        }
-       rc = ll_d_init(de);
-       if (rc < 0)
-               return ERR_PTR(rc);
        d_add(de, inode);
        CDEBUG(D_DENTRY, "Add dentry %p inode %p refc %d flags %#x\n",
               de, d_inode(de), d_count(de), de->d_flags);
index 0677513..166323f 100644 (file)
@@ -1513,9 +1513,7 @@ out_unplug:
         */
        ldd = ll_d2d(*dentryp);
        lli = ll_i2info(dir);
-       /* ldd can be NULL if llite lookup failed. */
-       if (ldd)
-               ldd->lld_sa_generation = lli->lli_sa_generation;
+       ldd->lld_sa_generation = lli->lli_sa_generation;
        sa_put(sai, entry);
        return rc;
 }