|
@@ -525,17 +525,22 @@ static void join_handler(int status, struct ib_sa_mcmember_rec *rec,
|
|
|
if (status)
|
|
|
process_join_error(group, status);
|
|
|
else {
|
|
|
+ int mgids_changed, is_mgid0;
|
|
|
ib_find_pkey(group->port->dev->device, group->port->port_num,
|
|
|
be16_to_cpu(rec->pkey), &pkey_index);
|
|
|
|
|
|
spin_lock_irq(&group->port->lock);
|
|
|
- group->rec = *rec;
|
|
|
if (group->state == MCAST_BUSY &&
|
|
|
group->pkey_index == MCAST_INVALID_PKEY_INDEX)
|
|
|
group->pkey_index = pkey_index;
|
|
|
- if (!memcmp(&mgid0, &group->rec.mgid, sizeof mgid0)) {
|
|
|
+ mgids_changed = memcmp(&rec->mgid, &group->rec.mgid,
|
|
|
+ sizeof(group->rec.mgid));
|
|
|
+ group->rec = *rec;
|
|
|
+ if (mgids_changed) {
|
|
|
rb_erase(&group->node, &group->port->table);
|
|
|
- mcast_insert(group->port, group, 1);
|
|
|
+ is_mgid0 = !memcmp(&mgid0, &group->rec.mgid,
|
|
|
+ sizeof(mgid0));
|
|
|
+ mcast_insert(group->port, group, is_mgid0);
|
|
|
}
|
|
|
spin_unlock_irq(&group->port->lock);
|
|
|
}
|