diff options
author | NeilBrown <neilb@suse.de> | 2023-05-09 09:42:47 +1000 |
---|---|---|
committer | Chuck Lever <chuck.lever@oracle.com> | 2023-05-14 15:55:02 -0400 |
commit | 948f072ada23e0a504c5e4d7d71d4c83bd0785ec (patch) | |
tree | 35e02b9a854af2107953dc9e7150bc98be37e453 /tools/testing/selftests/bpf/prog_tests/autoload.c | |
parent | eb8d3a2c809abd73ab0a060fe971d6b9019aa3c1 (diff) |
SUNRPC: always free ctxt when freeing deferred request
Since the ->xprt_ctxt pointer was added to svc_deferred_req, it has not
been sufficient to use kfree() to free a deferred request. We may need
to free the ctxt as well.
As freeing the ctxt is all that ->xpo_release_rqst() does, we repurpose
it to explicit do that even when the ctxt is not stored in an rqst.
So we now have ->xpo_release_ctxt() which is given an xprt and a ctxt,
which may have been taken either from an rqst or from a dreq. The
caller is now responsible for clearing that pointer after the call to
->xpo_release_ctxt.
We also clear dr->xprt_ctxt when the ctxt is moved into a new rqst when
revisiting a deferred request. This ensures there is only one pointer
to the ctxt, so the risk of double freeing in future is reduced. The
new code in svc_xprt_release which releases both the ctxt and any
rq_deferred depends on this.
Fixes: 773f91b2cf3f ("SUNRPC: Fix NFSD's request deferral on RDMA transports")
Signed-off-by: NeilBrown <neilb@suse.de>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/autoload.c')
0 files changed, 0 insertions, 0 deletions