SUNRPC: Defer deleting the security context until gss_do_free_ctx()
There is no need to delete the gss context separately from the rest of the security context information, and doing so gives rise to a an rcu_dereference_check() warning. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@@ -928,6 +928,7 @@ gss_do_free_ctx(struct gss_cl_ctx *ctx)
|
|||||||
{
|
{
|
||||||
dprintk("RPC: gss_free_ctx\n");
|
dprintk("RPC: gss_free_ctx\n");
|
||||||
|
|
||||||
|
gss_delete_sec_context(&ctx->gc_gss_ctx);
|
||||||
kfree(ctx->gc_wire_ctx.data);
|
kfree(ctx->gc_wire_ctx.data);
|
||||||
kfree(ctx);
|
kfree(ctx);
|
||||||
}
|
}
|
||||||
@@ -942,13 +943,7 @@ gss_free_ctx_callback(struct rcu_head *head)
|
|||||||
static void
|
static void
|
||||||
gss_free_ctx(struct gss_cl_ctx *ctx)
|
gss_free_ctx(struct gss_cl_ctx *ctx)
|
||||||
{
|
{
|
||||||
struct gss_ctx *gc_gss_ctx;
|
|
||||||
|
|
||||||
gc_gss_ctx = rcu_dereference(ctx->gc_gss_ctx);
|
|
||||||
rcu_assign_pointer(ctx->gc_gss_ctx, NULL);
|
|
||||||
call_rcu(&ctx->gc_rcu, gss_free_ctx_callback);
|
call_rcu(&ctx->gc_rcu, gss_free_ctx_callback);
|
||||||
if (gc_gss_ctx)
|
|
||||||
gss_delete_sec_context(&gc_gss_ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user