Fix kernel handling of a NFSERR_MINORVERSMISMATCH NFSv4 server reply.
When an NFSv4 server replies NFSERR_MINORVERSMISMATCH, it does not generate a status result for the first operation in the compound. Without this patch, this will result in a bogus EBADXDR error return. Returning EBADXDR is relatively harmless, but a correct reply of NFSERR_MINORVERSMISMATCH is needed by the pNFS client to select the correct minor version to use for a File Layout DS now that there can be NFSv4.2 DS servers. mount_nfs.c still needs to be fixed for this, although how the mount fails is only useful to help sysadmins isolate why a mount fails. Found during testing of the NFSv4.2 client and server. MFC after: 2 weeks
This commit is contained in:
parent
c0829bb1d6
commit
8e1906f700
@ -918,7 +918,8 @@ tryagain:
|
||||
* Get rid of the tag, return count and SEQUENCE result for
|
||||
* NFSv4.
|
||||
*/
|
||||
if ((nd->nd_flag & ND_NFSV4) != 0) {
|
||||
if ((nd->nd_flag & ND_NFSV4) != 0 && nd->nd_repstat !=
|
||||
NFSERR_MINORVERMISMATCH) {
|
||||
NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED);
|
||||
i = fxdr_unsigned(int, *tl);
|
||||
error = nfsm_advance(nd, NFSM_RNDUP(i), -1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user