diff mbox

NFS: put net in case of idr allocation failure

Message ID 20120820134350.27917.55176.stgit@localhost.localdomain (mailing list archive)
State New, archived
Headers show

Commit Message

Stanislav Kinsbursky Aug. 20, 2012, 1:43 p.m. UTC
Put net reference we got in nfs_alloc_client() on error path.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
---
 fs/nfs/nfs4client.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Trond Myklebust Aug. 20, 2012, 4:11 p.m. UTC | #1
On Mon, 2012-08-20 at 17:43 +0400, Stanislav Kinsbursky wrote:
> Put net reference we got in nfs_alloc_client() on error path.

> 

> Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>

> ---

>  fs/nfs/nfs4client.c |    1 +

>  1 files changed, 1 insertions(+), 0 deletions(-)

> 

> diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c

> index cbcdfaf..b895629 100644

> --- a/fs/nfs/nfs4client.c

> +++ b/fs/nfs/nfs4client.c

> @@ -74,6 +74,7 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init)

>  	return clp;

>  

>  error:

> +	put_net(clp->cl_net);

>  	kfree(clp);

>  	return ERR_PTR(err);

>  }



No, that isn't anywhere near sufficient.

The correct thing to do here is to replace the kfree with a call to
nfs_free_client(), which will also clean up the allocation of
cl_hostname, put the module, etc.

-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@netapp.com
www.netapp.com
Stanislav Kinsbursky Aug. 20, 2012, 4:14 p.m. UTC | #2
20.08.2012 20:11, Myklebust, Trond ?????:
> On Mon, 2012-08-20 at 17:43 +0400, Stanislav Kinsbursky wrote:
>> Put net reference we got in nfs_alloc_client() on error path.
>>
>> Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
>> ---
>>   fs/nfs/nfs4client.c |    1 +
>>   1 files changed, 1 insertions(+), 0 deletions(-)
>>
>> diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
>> index cbcdfaf..b895629 100644
>> --- a/fs/nfs/nfs4client.c
>> +++ b/fs/nfs/nfs4client.c
>> @@ -74,6 +74,7 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init)
>>   	return clp;
>>
>>   error:
>> +	put_net(clp->cl_net);
>>   	kfree(clp);
>>   	return ERR_PTR(err);
>>   }
>
>
> No, that isn't anywhere near sufficient.
>
> The correct thing to do here is to replace the kfree with a call to
> nfs_free_client(), which will also clean up the allocation of
> cl_hostname, put the module, etc.
>

Sure, you are right.
diff mbox

Patch

diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index cbcdfaf..b895629 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -74,6 +74,7 @@  struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init)
 	return clp;
 
 error:
+	put_net(clp->cl_net);
 	kfree(clp);
 	return ERR_PTR(err);
 }