diff mbox

pnfsd: Update the reference of nfs4_layout_state properly

Message ID 1358217471-18458-1-git-send-email-ycnian@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

ycnian@gmail.com Jan. 15, 2013, 2:37 a.m. UTC
From: Yanchuan Nian <ycnian@gmail.com>

The reference of nfs4_layout_state is set to 1 when creating.
it isn't necessary to increase the reference again in
nfs4_process_layout_stateid(), otherwise it will lead to a
memory leak.

Signed-off-by: Yanchuan Nian <ycnian@gmail.com>
---
 fs/nfsd/nfs4pnfsd.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Benny Halevy Jan. 21, 2013, 2:47 p.m. UTC | #1
On 2013-01-15 04:37, ycnian@gmail.com wrote:
> From: Yanchuan Nian <ycnian@gmail.com>
> 
> The reference of nfs4_layout_state is set to 1 when creating.
> it isn't necessary to increase the reference again in
> nfs4_process_layout_stateid(), otherwise it will lead to a
> memory leak.
> 
> Signed-off-by: Yanchuan Nian <ycnian@gmail.com>

Thanks. Committing for pnfs-all-3.7 and latest.

Benny

> ---
>  fs/nfsd/nfs4pnfsd.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/nfsd/nfs4pnfsd.c b/fs/nfsd/nfs4pnfsd.c
> index 2211b50..dd7856c 100644
> --- a/fs/nfsd/nfs4pnfsd.c
> +++ b/fs/nfsd/nfs4pnfsd.c
> @@ -248,10 +248,10 @@ nfs4_process_layout_stateid(struct nfs4_client *clp, struct nfs4_file *fp,
>  			status = nfserr_bad_stateid;
>  			goto out;
>  		}
> +		get_layout_state(ls);
>  	}
>  	status = 0;
>  
> -	get_layout_state(ls);
>  	*lsp = ls;
>  	dprintk("%s: layout stateid=" STATEID_FMT " ref=%d\n", __func__,
>  		STATEID_VAL(&ls->ls_stid.sc_stateid), atomic_read(&ls->ls_ref.refcount));
> 
--
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
diff mbox

Patch

diff --git a/fs/nfsd/nfs4pnfsd.c b/fs/nfsd/nfs4pnfsd.c
index 2211b50..dd7856c 100644
--- a/fs/nfsd/nfs4pnfsd.c
+++ b/fs/nfsd/nfs4pnfsd.c
@@ -248,10 +248,10 @@  nfs4_process_layout_stateid(struct nfs4_client *clp, struct nfs4_file *fp,
 			status = nfserr_bad_stateid;
 			goto out;
 		}
+		get_layout_state(ls);
 	}
 	status = 0;
 
-	get_layout_state(ls);
 	*lsp = ls;
 	dprintk("%s: layout stateid=" STATEID_FMT " ref=%d\n", __func__,
 		STATEID_VAL(&ls->ls_stid.sc_stateid), atomic_read(&ls->ls_ref.refcount));