]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
LINUX: add afs_d_alias_lock & _unlock compat wrappers
authorMark Vitale <mvitale@sinenomine.net>
Thu, 30 Nov 2017 21:46:16 +0000 (16:46 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Wed, 3 Jan 2018 05:43:29 +0000 (00:43 -0500)
Simplify some #ifdefs for HAVE_DCACHE_LOCK by pushing them down into
new helpers in osi_compat.h.

No functional change should be incurred by this commit.

Reviewed-on: https://gerrit.openafs.org/12790
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 652cd597d9b3cf1a9daccbbf6bf35f1b0cd55a94)

Change-Id: I6aec7d6a21e68011ca10ceaa15e83d80f52fad59
Reviewed-on: https://gerrit.openafs.org/12848
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
src/afs/LINUX/osi_compat.h
src/afs/LINUX/osi_vcache.c
src/afs/LINUX/osi_vnodeops.c

index 7ed4d057edc5a89df1382718913d0890a103b950..abe6b711be000aa71be737b5cd5a05f6195f1111 100644 (file)
@@ -471,6 +471,18 @@ afs_linux_unlock_inode(struct inode *ip) {
 #endif
 }
 
+/* Use these to lock or unlock an inode for processing
+ * its dentry aliases en masse.
+ */
+#if defined(HAVE_DCACHE_LOCK)
+#define afs_d_alias_lock(ip)       spin_lock(&dcache_lock)
+#define afs_d_alias_unlock(ip)     spin_unlock(&dcache_lock)
+#else
+#define afs_d_alias_lock(ip)       spin_lock(&(ip)->i_lock)
+#define afs_d_alias_unlock(ip)     spin_unlock(&(ip)->i_lock)
+#endif
+
+
 /* Use this instead of dget for dentry operations
  * that occur under a higher lock (e.g. alias processing).
  * Requires that the higher lock (e.g. dcache_lock or
index e4639717cef91431abc8347de628f3d0fb002fca..e7c8620620bbb1342728b9c8a0caf2f4663d3d1b 100644 (file)
@@ -25,7 +25,7 @@ TryEvictDentries(struct vcache *avc)
 #endif
 
 #if defined(HAVE_DCACHE_LOCK)
-    spin_lock(&dcache_lock);
+    afs_d_alias_lock(inode);
 
 restart:
     list_for_each_entry(dentry, &inode->i_dentry, d_alias) {
@@ -33,19 +33,19 @@ restart:
            continue;
        afs_linux_dget(dentry);
 
-       spin_unlock(&dcache_lock);
+       afs_d_alias_unlock(inode);
        if (d_invalidate(dentry) == -EBUSY) {
            dput(dentry);
            /* perhaps lock and try to continue? (use cur as head?) */
            goto inuse;
        }
        dput(dentry);
-       spin_lock(&dcache_lock);
+       afs_d_alias_lock(inode);
        goto restart;
     }
-    spin_unlock(&dcache_lock);
+    afs_d_alias_unlock(inode);
 #else /* HAVE_DCACHE_LOCK */
-    spin_lock(&inode->i_lock);
+    afs_d_alias_lock(inode);
 
 restart:
 #if defined(D_ALIAS_IS_HLIST)
@@ -65,17 +65,17 @@ restart:
        spin_unlock(&dentry->d_lock);
        afs_linux_dget(dentry);
 
-       spin_unlock(&inode->i_lock);
+       afs_d_alias_unlock(inode);
        if (afs_d_invalidate(dentry) == -EBUSY) {
            dput(dentry);
            /* perhaps lock and try to continue? (use cur as head?) */
            goto inuse;
        }
        dput(dentry);
-       spin_lock(&inode->i_lock);
+       afs_d_alias_lock(inode);
        goto restart;
     }
-    spin_unlock(&inode->i_lock);
+    afs_d_alias_unlock(inode);
 #endif /* HAVE_DCACHE_LOCK */
 inuse:
     return;
@@ -197,11 +197,8 @@ osi_ResetRootVCache(afs_uint32 volid)
 
     dp = d_find_alias(root);
 
-#if defined(HAVE_DCACHE_LOCK)
-    spin_lock(&dcache_lock);
-#else
-    spin_lock(&AFSTOV(vcp)->i_lock);
-#endif
+    afs_d_alias_lock(AFSTOV(vcp));
+
     spin_lock(&dp->d_lock);
 #if defined(D_ALIAS_IS_HLIST)
     hlist_del_init(&dp->d_alias);
@@ -212,11 +209,9 @@ osi_ResetRootVCache(afs_uint32 volid)
 #endif
     dp->d_inode = AFSTOV(vcp);
     spin_unlock(&dp->d_lock);
-#if defined(HAVE_DCACHE_LOCK)
-    spin_unlock(&dcache_lock);
-#else
-    spin_unlock(&AFSTOV(vcp)->i_lock);
-#endif
+
+    afs_d_alias_unlock(AFSTOV(vcp));
+
     dput(dp);
 
     AFS_RELE(root);
index 3bb2f7601c35bea768125030e078fbe0a9383f74..a9394ee3760c64e8bbaf20c5e76f98084f95e7a5 100644 (file)
@@ -890,11 +890,7 @@ canonical_dentry(struct inode *ip)
 
     d_prune_aliases(ip);
 
-# ifdef HAVE_DCACHE_LOCK
-    spin_lock(&dcache_lock);
-# else
-    spin_lock(&ip->i_lock);
-# endif
+    afs_d_alias_lock(ip);
 
 #if defined(D_ALIAS_IS_HLIST)
 # if defined(HLIST_ITERATOR_NO_NODE)
@@ -925,12 +921,12 @@ canonical_dentry(struct inode *ip)
     if (ret) {
        afs_linux_dget(ret);
     }
-    spin_unlock(&dcache_lock);
+    afs_d_alias_unlock(ip);
 # else
     if (ret) {
        afs_linux_dget(ret);
     }
-    spin_unlock(&ip->i_lock);
+    afs_d_alias_unlock(ip);
 # endif
 
     return ret;