SUNRPC: Ensure gss-proxy connects on setup
For reasons best known to the author, gss-proxy does not implement a
NULL procedure, and returns RPC_PROC_UNAVAIL. However we still want to
ensure that we connect to the service at setup time.
So add a quirk-flag specially for this case.
Fixes: 1d658336b0
("SUNRPC: Add RPC based upcall mechanism for RPCGSS auth")
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
efce2d0ba6
commit
892de36fd4
3 changed files with 5 additions and 1 deletions
|
@ -160,6 +160,7 @@ struct rpc_add_xprt_test {
|
||||||
#define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9)
|
#define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9)
|
||||||
#define RPC_CLNT_CREATE_SOFTERR (1UL << 10)
|
#define RPC_CLNT_CREATE_SOFTERR (1UL << 10)
|
||||||
#define RPC_CLNT_CREATE_REUSEPORT (1UL << 11)
|
#define RPC_CLNT_CREATE_REUSEPORT (1UL << 11)
|
||||||
|
#define RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL (1UL << 12)
|
||||||
|
|
||||||
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
||||||
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
||||||
|
|
|
@ -97,7 +97,7 @@ static int gssp_rpc_create(struct net *net, struct rpc_clnt **_clnt)
|
||||||
* timeout, which would result in reconnections being
|
* timeout, which would result in reconnections being
|
||||||
* done without the correct namespace:
|
* done without the correct namespace:
|
||||||
*/
|
*/
|
||||||
.flags = RPC_CLNT_CREATE_NOPING |
|
.flags = RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL |
|
||||||
RPC_CLNT_CREATE_NO_IDLE_TIMEOUT
|
RPC_CLNT_CREATE_NO_IDLE_TIMEOUT
|
||||||
};
|
};
|
||||||
struct rpc_clnt *clnt;
|
struct rpc_clnt *clnt;
|
||||||
|
|
|
@ -479,6 +479,9 @@ static struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
|
||||||
|
|
||||||
if (!(args->flags & RPC_CLNT_CREATE_NOPING)) {
|
if (!(args->flags & RPC_CLNT_CREATE_NOPING)) {
|
||||||
int err = rpc_ping(clnt);
|
int err = rpc_ping(clnt);
|
||||||
|
if ((args->flags & RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL) &&
|
||||||
|
err == -EOPNOTSUPP)
|
||||||
|
err = 0;
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
rpc_shutdown_client(clnt);
|
rpc_shutdown_client(clnt);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
|
|
Loading…
Add table
Reference in a new issue