Add checks for failed operations to the NFSv4 client function nfscl_mtofh().
The nfscl_mtofh() function didn't check for failed operations and, as such, would have returned EBADRPC for these cases, due to parsing failure. This patch adds checks, so that it returns with ND_NOMOREDATA set. This is needed for future use in the pNFS server and acts as a safety belt in the meantime. MFC after: 2 weeks
This commit is contained in:
parent
97662c7c33
commit
e96af29419
@ -471,6 +471,11 @@ nfscl_mtofh(struct nfsrv_descript *nd, struct nfsfh **nfhpp,
|
||||
flag = fxdr_unsigned(int, *tl);
|
||||
} else if (nd->nd_flag & ND_NFSV4) {
|
||||
NFSM_DISSECT(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
|
||||
/* If the GetFH failed, clear flag. */
|
||||
if (*++tl != 0) {
|
||||
nd->nd_flag |= ND_NOMOREDATA;
|
||||
flag = 0;
|
||||
}
|
||||
}
|
||||
if (flag) {
|
||||
error = nfsm_getfh(nd, nfhpp);
|
||||
@ -481,8 +486,12 @@ nfscl_mtofh(struct nfsrv_descript *nd, struct nfsfh **nfhpp,
|
||||
/*
|
||||
* Now, get the attributes.
|
||||
*/
|
||||
if (nd->nd_flag & ND_NFSV4) {
|
||||
if (flag != 0 && (nd->nd_flag & ND_NFSV4) != 0) {
|
||||
NFSM_DISSECT(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
|
||||
if (*++tl != 0) {
|
||||
nd->nd_flag |= ND_NOMOREDATA;
|
||||
flag = 0;
|
||||
}
|
||||
} else if (nd->nd_flag & ND_NFSV3) {
|
||||
NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED);
|
||||
if (flag) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user