-- 
Thanks,
Oliver
commit 22ce96e4a0adb59223039e3a79d6c590dca60324
Author: Trond Myklebust <[EMAIL PROTECTED]>
Date:   Tue Dec 11 11:05:19 2007 -0500

    Subject: NFSv2/v3: Fix a memory leak when using -onolock
    Patch-mainline: 2.6.24
    References: 336253
    
    
    
        Neil Brown said:
        > Hi Trond,
        >
        > We found that a machine which made moderately heavy use of
        > 'automount' was leaking some nfs data structures - particularly the
        > 4K allocated by rpc_alloc_iostats.
        > It turns out that this only happens with filesystems with -onolock
        > set.
    
        > The problem is that if NFS_MOUNT_NONLM is set, nfs_start_lockd doesn't
        > set server->destroy, so when the filesystem is unmounted, the
        > ->client_acl is not shutdown, and so several resources are still
        > held.  Multiple mount/umount cycles will slowly eat away memory
        > several pages at a time.
    
        Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
    
    Acked-by: Neil Brown <[EMAIL PROTECTED]>
    Signed-off-by: Neil Brown <[EMAIL PROTECTED]>

diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index aaf4b04..b6fd8a7 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -433,9 +433,6 @@ static int nfs_create_rpc_client(struct nfs_client *clp, int proto,
  */
 static void nfs_destroy_server(struct nfs_server *server)
 {
-	if (!IS_ERR(server->client_acl))
-		rpc_shutdown_client(server->client_acl);
-
 	if (!(server->flags & NFS_MOUNT_NONLM))
 		lockd_down();	/* release rpc.lockd */
 }
@@ -771,6 +768,9 @@ void nfs_free_server(struct nfs_server *server)
 
 	if (server->destroy != NULL)
 		server->destroy(server);
+
+	if (!IS_ERR(server->client_acl))
+		rpc_shutdown_client(server->client_acl);
 	if (!IS_ERR(server->client))
 		rpc_shutdown_client(server->client);
 

Reply via email to