|
@@ -693,7 +693,7 @@ gss_destroying_context(struct rpc_cred *cred)
|
|
|
struct rpc_task *task;
|
|
|
|
|
|
if (gss_cred->gc_ctx == NULL ||
|
|
|
- test_and_clear_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags) == 0)
|
|
|
+ test_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags) == 0)
|
|
|
return 0;
|
|
|
|
|
|
gss_cred->gc_ctx->gc_proc = RPC_GSS_PROC_DESTROY;
|
|
@@ -757,14 +757,12 @@ gss_free_cred_callback(struct rcu_head *head)
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-gss_destroy_cred(struct rpc_cred *cred)
|
|
|
+gss_destroy_nullcred(struct rpc_cred *cred)
|
|
|
{
|
|
|
struct gss_cred *gss_cred = container_of(cred, struct gss_cred, gc_base);
|
|
|
struct gss_auth *gss_auth = container_of(cred->cr_auth, struct gss_auth, rpc_auth);
|
|
|
struct gss_cl_ctx *ctx = gss_cred->gc_ctx;
|
|
|
|
|
|
- if (gss_destroying_context(cred))
|
|
|
- return;
|
|
|
rcu_assign_pointer(gss_cred->gc_ctx, NULL);
|
|
|
call_rcu(&cred->cr_rcu, gss_free_cred_callback);
|
|
|
if (ctx)
|
|
@@ -772,6 +770,15 @@ gss_destroy_cred(struct rpc_cred *cred)
|
|
|
kref_put(&gss_auth->kref, gss_free_callback);
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+gss_destroy_cred(struct rpc_cred *cred)
|
|
|
+{
|
|
|
+
|
|
|
+ if (gss_destroying_context(cred))
|
|
|
+ return;
|
|
|
+ gss_destroy_nullcred(cred);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Lookup RPCSEC_GSS cred for the current process
|
|
|
*/
|
|
@@ -1324,7 +1331,7 @@ static const struct rpc_credops gss_credops = {
|
|
|
|
|
|
static const struct rpc_credops gss_nullops = {
|
|
|
.cr_name = "AUTH_GSS",
|
|
|
- .crdestroy = gss_destroy_cred,
|
|
|
+ .crdestroy = gss_destroy_nullcred,
|
|
|
.crbind = rpcauth_generic_bind_cred,
|
|
|
.crmatch = gss_match,
|
|
|
.crmarshal = gss_marshal,
|