Messages in this thread | | | From | Arne Redlich <> | Subject | Re: [PATCH 1/2] IB/iSER: fix list iteration bug | Date | Tue, 04 Mar 2008 16:41:20 +0100 |
| |
Erez Zilber <erezz@voltaire.com> writes:
> Arne Redlich wrote: >> The iteration through the list of "iser_device"s during device >> lookup/creation is broken - it might result in an infinite loop if more >> than 1 HCA is used with iSER. Use list_for_each_entry() instead of the >> custom, flawed list iteration code. >> >> Signed-off-by: Arne Redlich <arne.redlich@xiranet.com> >> --- >> drivers/infiniband/ulp/iser/iser_verbs.c | 36 ++++++++++++----------------- >> 1 files changed, 15 insertions(+), 21 deletions(-) >> >> diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c >> index 714b8db..1c0f968 100644 >> --- a/drivers/infiniband/ulp/iser/iser_verbs.c >> +++ b/drivers/infiniband/ulp/iser/iser_verbs.c >> @@ -237,33 +237,27 @@ static int iser_free_ib_conn_res(struct iser_conn *ib_conn) >> static >> struct iser_device *iser_device_find_by_ib_device(struct rdma_cm_id *cma_id) >> { >> - struct list_head *p_list; >> - struct iser_device *device = NULL; >> + struct iser_device *device; >> >> mutex_lock(&ig.device_list_mutex); >> >> - p_list = ig.device_list.next; >> - while (p_list != &ig.device_list) { >> - device = list_entry(p_list, struct iser_device, ig_list); >> - /* find if there's a match using the node GUID */ >> + list_for_each_entry(device, &ig.device_list, ig_list) > > I've just added the original comments that are missing in your patch.
Ah well, I probably should've mentioned in the patch description that I intentionally removed those comments as I think they're really redundant, stating the obvious. But of course I won't insist. :)
Thanks, Arne
| |