> On Jan 25, 2022, at 2:17 PM, Dan Aloni <dan.aloni@xxxxxxxxxxxx> wrote: > > These pointers can be non-NULL and contain errors if initialization is > aborted early. This is similar to how `__svc_rdma_free` takes care of > it. IIUC the only place that can set these values to an ERR_PTR is rpcrdma_ep_create() ? I think I'd rather have rpcrdma_ep_create() set the fields to NULL in the error cases. Good catch. I'm afraid to ask how you found this. > Signed-off-by: Dan Aloni <dan.aloni@xxxxxxxxxxxx> > --- > net/sunrpc/xprtrdma/verbs.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c > index f172d1298013..7f3173073e72 100644 > --- a/net/sunrpc/xprtrdma/verbs.c > +++ b/net/sunrpc/xprtrdma/verbs.c > @@ -336,14 +336,14 @@ static void rpcrdma_ep_destroy(struct kref *kref) > ep->re_id->qp = NULL; > } > > - if (ep->re_attr.recv_cq) > + if (ep->re_attr.recv_cq && !IS_ERR(ep->re_attr.recv_cq)) > ib_free_cq(ep->re_attr.recv_cq); > ep->re_attr.recv_cq = NULL; > - if (ep->re_attr.send_cq) > + if (ep->re_attr.send_cq && !IS_ERR(ep->re_attr.send_cq)) > ib_free_cq(ep->re_attr.send_cq); > ep->re_attr.send_cq = NULL; > > - if (ep->re_pd) > + if (ep->re_pd && !IS_ERR(ep->re_pd)) > ib_dealloc_pd(ep->re_pd); > ep->re_pd = NULL; > > -- > 2.23.0 > -- Chuck Lever