handling rpc_autherr
instead of trying to restablish the rpc client and auth_client for autherr, instead just create a new auth_client.
This commit is contained in:
parent
c1b603ad7f
commit
c24c79f3cc
1 changed files with 15 additions and 3 deletions
|
|
@ -359,7 +359,7 @@ int nfs41_send_compound(
|
||||||
case RPC_CANTSEND:
|
case RPC_CANTSEND:
|
||||||
case RPC_TIMEDOUT:
|
case RPC_TIMEDOUT:
|
||||||
case RPC_AUTHERROR:
|
case RPC_AUTHERROR:
|
||||||
if (!rpc->is_valid_session && ++count > 3) {
|
if (++count > 3 || !rpc->is_valid_session) {
|
||||||
status = ERROR_NETWORK_UNREACHABLE;
|
status = ERROR_NETWORK_UNREACHABLE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -377,6 +377,18 @@ int nfs41_send_compound(
|
||||||
goto try_again;
|
goto try_again;
|
||||||
}
|
}
|
||||||
rpc_renew_in_progress(rpc, &one);
|
rpc_renew_in_progress(rpc, &one);
|
||||||
|
if (rpc_status == RPC_AUTHERROR && rpc->sec_flavor != RPCSEC_AUTH_SYS) {
|
||||||
|
AcquireSRWLockExclusive(&rpc->lock);
|
||||||
|
auth_destroy(rpc->rpc->cl_auth);
|
||||||
|
status = create_rpcsec_auth_client(rpc->sec_flavor,
|
||||||
|
rpc->server_name, rpc->rpc);
|
||||||
|
ReleaseSRWLockExclusive(&rpc->lock);
|
||||||
|
if (status) {
|
||||||
|
eprintf("Failed to reestablish security context\n");
|
||||||
|
status = ERROR_NETWORK_UNREACHABLE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
} else
|
||||||
if (rpc_reconnect(rpc))
|
if (rpc_reconnect(rpc))
|
||||||
eprintf("rpc_reconnect: Failed to reconnect!\n");
|
eprintf("rpc_reconnect: Failed to reconnect!\n");
|
||||||
rpc_renew_in_progress(rpc, &zero);
|
rpc_renew_in_progress(rpc, &zero);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue