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>
This commit is contained in:
@@ -2778,8 +2778,6 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
|
||||
read->rd_offset, resp->rqstp->rq_vec, read->rd_vlen,
|
||||
&maxcount);
|
||||
|
||||
if (nfserr == nfserr_symlink)
|
||||
nfserr = nfserr_inval;
|
||||
if (nfserr)
|
||||
return nfserr;
|
||||
eof = (read->rd_offset + maxcount >=
|
||||
@@ -2905,8 +2903,6 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4
|
||||
readdir->common.err == nfserr_toosmall &&
|
||||
readdir->buffer == page)
|
||||
nfserr = nfserr_toosmall;
|
||||
if (nfserr == nfserr_symlink)
|
||||
nfserr = nfserr_notdir;
|
||||
if (nfserr)
|
||||
goto err_no_verf;
|
||||
|
||||
|
Reference in New Issue
Block a user