| From: fanchaoting <fanchaoting@cn.fujitsu.com> |
| Date: Mon, 1 Apr 2013 21:07:22 +0800 |
| Subject: nfsd: don't run get_file if nfs4_preprocess_stateid_op return error |
| |
| commit b022032e195ffca83d7002d6b84297d796ed443b upstream. |
| |
| we should return error status directly when nfs4_preprocess_stateid_op |
| return error. |
| |
| Signed-off-by: fanchaoting <fanchaoting@cn.fujitsu.com> |
| Signed-off-by: J. Bruce Fields <bfields@redhat.com> |
| [bwh: Backported to 3.2: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| fs/nfsd/nfs4proc.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| --- a/fs/nfsd/nfs4proc.c |
| +++ b/fs/nfsd/nfs4proc.c |
| @@ -880,14 +880,14 @@ nfsd4_write(struct svc_rqst *rqstp, stru |
| |
| nfs4_lock_state(); |
| status = nfs4_preprocess_stateid_op(cstate, stateid, WR_STATE, &filp); |
| - if (filp) |
| - get_file(filp); |
| - nfs4_unlock_state(); |
| - |
| if (status) { |
| + nfs4_unlock_state(); |
| dprintk("NFSD: nfsd4_write: couldn't process stateid!\n"); |
| return status; |
| } |
| + if (filp) |
| + get_file(filp); |
| + nfs4_unlock_state(); |
| |
| cnt = write->wr_buflen; |
| write->wr_how_written = write->wr_stable_how; |