浏览代码

nfsd: reduce some spinlocking in put_client_renew

No need to take the lock unless the count goes to 0.

Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Jeff Layton 11 年之前
父节点
当前提交
d6c249b4d4
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      fs/nfsd/nfs4state.c

+ 4 - 2
fs/nfsd/nfs4state.c

@@ -193,8 +193,10 @@ static void put_client_renew(struct nfs4_client *clp)
 {
 {
 	struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
 	struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
 
 
-	spin_lock(&nn->client_lock);
-	put_client_renew_locked(clp);
+	if (!atomic_dec_and_lock(&clp->cl_refcount, &nn->client_lock))
+		return;
+	if (!is_client_expired(clp))
+		renew_client_locked(clp);
 	spin_unlock(&nn->client_lock);
 	spin_unlock(&nn->client_lock);
 }
 }