diff options
author | J. Bruce Fields <bfields@redhat.com> | 2011-08-15 18:39:32 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2011-08-26 18:22:50 -0400 |
commit | 75c096f753b273b59f1b9a0745e9e4b5d911a312 (patch) | |
tree | e447160f8c299cbdc20718d56c8a995bc17dd381 /fs/nfsd/nfs4state.c | |
parent | e281d8100995133dc65e00b1dec8f84b91b6e8c3 (diff) |
nfsd4: it's OK to return nfserr_symlink
The nfsd4 code has a bunch of special exceptions for error returns which
map nfserr_symlink to other errors.
In fact, the spec makes it clear that nfserr_symlink is to be preferred
over less specific errors where possible.
The patch that introduced it back in 2.6.4 is "kNFSd: correct symlink
related error returns.", which claims that these special exceptions are
represent an NFSv4 break from v2/v3 tradition--when in fact the symlink
error was introduced with v4.
I suspect what happened was pynfs tests were written that were overly
faithful to the (known-incomplete) rfc3530 error return lists, and then
code was fixed up mindlessly to make the tests pass.
Delete these unnecessary exceptions.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 3787ec117400..aa0a36e3b09e 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -4179,12 +4179,8 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
4179 | if (!nfsd4_has_session(cstate) && STALE_CLIENTID(&lockt->lt_clientid)) | 4179 | if (!nfsd4_has_session(cstate) && STALE_CLIENTID(&lockt->lt_clientid)) |
4180 | goto out; | 4180 | goto out; |
4181 | 4181 | ||
4182 | if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) { | 4182 | if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0))) |
4183 | dprintk("NFSD: nfsd4_lockt: fh_verify() failed!\n"); | ||
4184 | if (status == nfserr_symlink) | ||
4185 | status = nfserr_inval; | ||
4186 | goto out; | 4183 | goto out; |
4187 | } | ||
4188 | 4184 | ||
4189 | inode = cstate->current_fh.fh_dentry->d_inode; | 4185 | inode = cstate->current_fh.fh_dentry->d_inode; |
4190 | locks_init_lock(&file_lock); | 4186 | locks_init_lock(&file_lock); |