[ofa-general] Re: [PATCH v2] ib/core: fix for send multicast group send leave retry

Roland Dreier rdreier at cisco.com
Fri Aug 8 14:18:13 PDT 2008


Sean, what do you think of this?

 > Until now, only if joinning a multicast group failed there was a retry
 > mechanism.
 > This patch will add a mechanism that will retry to leave a multicast
 > group before giving up.
 > Changes from v1:
 > 
 > - Save the leave state because it's overridden
 > - use 'else'
 > 
 > Signed-off-by: Ron Livne <ronli at voltaire.com>
 > Signed-off-by: Yossi Etigin <yosefe at voltaire.com>
 > 
 > 
 > Index: b/drivers/infiniband/core/multicast.c
 > ===================================================================
 > --- a/drivers/infiniband/core/multicast.c	2008-07-07 20:09:15.000000000 +0300
 > +++ b/drivers/infiniband/core/multicast.c	2008-08-06 20:08:18.000000000 +0300
 > @@ -106,6 +106,8 @@ struct mcast_group {
 > 	struct ib_sa_query	*query;
 > 	int			query_id;
 > 	u16			pkey_index;
 > +	u8			leave_state;
 > +	int			retries;
 > };
 > 
 > struct mcast_member {
 > @@ -350,6 +352,7 @@ static int send_leave(struct mcast_group
 > 
 > 	rec = group->rec;
 > 	rec.join_state = leave_state;
 > +	group->leave_state = leave_state;
 > 
 > 	ret = ib_sa_mcmember_rec_query(&sa_client, port->dev->device,
 > 				       port->port_num, IB_SA_METHOD_DELETE, &rec,
 > @@ -542,7 +545,11 @@ static void leave_handler(int status, st
 > {
 > 	struct mcast_group *group = context;
 > 
 > -	mcast_work_handler(&group->work);
 > +	if (status && (group->retries > 0)) {
 > +		send_leave(group, group->leave_state);
 > +		group->retries--;
 > +	} else
 > +		mcast_work_handler(&group->work);
 > }
 > 
 > static struct mcast_group *acquire_group(struct mcast_port *port,
 > @@ -565,6 +572,7 @@ static struct mcast_group *acquire_group
 > 	if (!group)
 > 		return NULL;
 > 
 > +	group->retries = 3;
 > 	group->port = port;
 > 	group->rec.mgid = *mgid;
 > 	group->pkey_index = MCAST_INVALID_PKEY_INDEX;
 > 
 > --
 > --Yossi
 > 
 > -- 
 > --Yossi
 > 



More information about the general mailing list