]> err.no Git - linux-2.6/commitdiff
NFS: Fix an Oops in the nfs_access_cache_shrinker()
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 5 Jun 2007 23:23:43 +0000 (19:23 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 11 Jul 2007 03:40:25 +0000 (23:40 -0400)
The nfs_access_cache_shrinker may race with nfs_access_zap_cache().

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/dir.c

index 0f41678fd7ee651aa9b2ecda68ccb90deb58a751..322141f4ab4810f5230898c2f1773e5290476242 100644 (file)
@@ -1743,8 +1743,8 @@ int nfs_access_cache_shrinker(int nr_to_scan, gfp_t gfp_mask)
        struct nfs_inode *nfsi;
        struct nfs_access_entry *cache;
 
-       spin_lock(&nfs_access_lru_lock);
 restart:
+       spin_lock(&nfs_access_lru_lock);
        list_for_each_entry(nfsi, &nfs_access_lru_list, access_cache_inode_lru) {
                struct inode *inode;
 
@@ -1769,6 +1769,7 @@ remove_lru_entry:
                        clear_bit(NFS_INO_ACL_LRU_SET, &nfsi->flags);
                }
                spin_unlock(&inode->i_lock);
+               spin_unlock(&nfs_access_lru_lock);
                iput(inode);
                goto restart;
        }