Hi Erez, > Can you please elaborate what will avoid the other task that > invalidate the priv->broadcast (ipoib_mcast_dev_flush) to do it right > after that check? I was considering check for IPOIB_FLAG_OPER_UP in mcast task loop would be sufficient as its state is serialized by priv->lock: > > list_for_each_entry(mcast, &priv->multicast_list, list) { > > + if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) { And I can see your point now. We unlock before calling mcast_join(). Apparently check for OPER_UP flag should be added along priv->broadcast check as it will ensure indication if mcast worker is competing with event handler worker. Thanks, Alex. ��.n��������+%������w��{.n�����{���fk��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f