SUNRPC: Defer deleting the security context until gss_do_free_ctx()
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 2 Aug 2010 00:14:55 +0000 (20:14 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 4 Aug 2010 12:55:14 +0000 (08:55 -0400)
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>
net/sunrpc/auth_gss/auth_gss.c

index 096e1260bc679c1a537ed6d39579bd2690c992ec..dcfc66bab2bb16f9872aca4adc6b258b55afe05a 100644 (file)
@@ -928,6 +928,7 @@ gss_do_free_ctx(struct gss_cl_ctx *ctx)
 {
        dprintk("RPC:       gss_free_ctx\n");
 
+       gss_delete_sec_context(&ctx->gc_gss_ctx);
        kfree(ctx->gc_wire_ctx.data);
        kfree(ctx);
 }
@@ -942,13 +943,7 @@ gss_free_ctx_callback(struct rcu_head *head)
 static void
 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);
-       if (gc_gss_ctx)
-               gss_delete_sec_context(&gc_gss_ctx);
 }
 
 static void