Re: [PATCH 03/11] drbd_transport_rdma: put kref for cm in dtr_path_established in error path
Dongsheng Yang <[email protected]> Mon, 1 Jul 2024 10:07:05 +0800
| Newsgroups | dev.linux.lists.drbd-dev |
|---|---|
| Message-ID | <[email protected]> |
在 2024/6/28 星期五 下午 5:40, Philipp Reisner 写道: > Hello Dongsheng, > > Please add more information why you think this change fixes a bug. > Have you experienced a leak of cm structs? > We got a RDMA_CM_EVENT_ESTABLISHED event. Even if DRBD does not do > anything with this cm, we sill expect a RDMA_CM_EVENT_DISCONNECTED in > the future. Is a problem in the handling of the disconnect? If dtr_path_established() go into this branch, it will not schedule_work(&cm->establish_work); That means path->cm->state = DSM_CONNECTED; will not be done in dtr_path_established_work_fn(), so __dtr_disconnect_path() will not call rdma_disconnect(). That means this reference will never be put. > > best regards, > Philipp > > On Mon, Jun 24, 2024 at 9:28 AM zhengbing.huang > <[email protected]> wrote: >> >> From: Dongsheng Yang <[email protected]> >> >> Signed-off-by: Dongsheng Yang <[email protected]> >> --- >> drbd/drbd_transport_rdma.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/drbd/drbd_transport_rdma.c b/drbd/drbd_transport_rdma.c >> index cfbae0e78..eccd0c6ce 100644 >> --- a/drbd/drbd_transport_rdma.c >> +++ b/drbd/drbd_transport_rdma.c >> @@ -922,6 +922,7 @@ static void dtr_path_established(struct dtr_cm *cm) >> atomic_set(&cs->active_state, PCS_INACTIVE); >> wake_up(&cs->wq); >> } >> + kref_put(&cm->kref, dtr_destroy_cm); >> return; >> } >> >> -- >> 2.27.0 >>