X-Git-Url: http://git.openafs.org/?p=openafs.git;a=blobdiff_plain;f=src%2Fafs%2FLINUX%2Fosi_vcache.c;h=1a5012c95d086b8b71d7b7fe49f0e67a4e293857;hp=e4639717cef91431abc8347de628f3d0fb002fca;hb=5076dfc14b980aed310f3862875d5e9919fa199d;hpb=74f4bfc627c836c12bb7c188b86d570d2afdcae8 diff --git a/src/afs/LINUX/osi_vcache.c b/src/afs/LINUX/osi_vcache.c index e463971..1a5012c 100644 --- a/src/afs/LINUX/osi_vcache.c +++ b/src/afs/LINUX/osi_vcache.c @@ -24,28 +24,7 @@ TryEvictDentries(struct vcache *avc) struct hlist_node *p; #endif -#if defined(HAVE_DCACHE_LOCK) - spin_lock(&dcache_lock); - -restart: - list_for_each_entry(dentry, &inode->i_dentry, d_alias) { - if (d_unhashed(dentry)) - continue; - afs_linux_dget(dentry); - - spin_unlock(&dcache_lock); - 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); - goto restart; - } - spin_unlock(&dcache_lock); -#else /* HAVE_DCACHE_LOCK */ - spin_lock(&inode->i_lock); + afs_d_alias_lock(inode); restart: #if defined(D_ALIAS_IS_HLIST) @@ -65,18 +44,18 @@ 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); -#endif /* HAVE_DCACHE_LOCK */ + afs_d_alias_unlock(inode); + inuse: return; } @@ -197,11 +176,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 +188,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);