Lines Matching refs:member

216 static void deref_member(struct mcast_member *member)
218 if (atomic_dec_and_test(&member->refcount))
219 complete(&member->comp);
222 static void queue_join(struct mcast_member *member)
224 struct mcast_group *group = member->group;
228 list_add_tail(&member->list, &group->pending_list);
238 * A multicast group has three types of members: full member, non member, and
239 * send only member. We need to keep track of the number of members of each
254 * the group is still a member with the SA, we need to leave that join state.
345 static int send_join(struct mcast_group *group, struct mcast_member *member)
350 group->last_join = member;
353 &member->multicast.rec,
354 member->multicast.comp_mask,
388 static void join_group(struct mcast_group *group, struct mcast_member *member,
391 member->state = MCAST_MEMBER;
394 member->multicast.rec = group->rec;
395 member->multicast.rec.join_state = join_state;
396 list_move(&member->list, &group->active_list);
399 static int fail_join(struct mcast_group *group, struct mcast_member *member,
403 list_del_init(&member->list);
405 return member->multicast.callback(status, &member->multicast);
410 struct mcast_member *member;
425 member = list_entry(group->active_list.next,
427 atomic_inc(&member->refcount);
428 list_del_init(&member->list);
429 adjust_membership(group, member->multicast.rec.join_state, -1);
430 member->state = MCAST_ERROR;
433 ret = member->multicast.callback(-ENETRESET,
434 &member->multicast);
435 deref_member(member);
437 ib_sa_free_multicast(&member->multicast);
450 struct mcast_member *member;
467 member = list_entry(group->pending_list.next,
469 multicast = &member->multicast;
471 atomic_inc(&member->refcount);
477 join_group(group, member, join_state);
479 list_del_init(&member->list);
484 status = send_join(group, member);
486 deref_member(member);
489 ret = fail_join(group, member, status);
492 deref_member(member);
494 ib_sa_free_multicast(&member->multicast);
516 struct mcast_member *member;
520 member = list_entry(group->pending_list.next,
522 if (group->last_join == member) {
523 atomic_inc(&member->refcount);
524 list_del_init(&member->list);
526 ret = member->multicast.callback(status, &member->multicast);
527 deref_member(member);
529 ib_sa_free_multicast(&member->multicast);
635 struct mcast_member *member;
643 member = kmalloc(sizeof *member, gfp_mask);
644 if (!member)
648 member->client = client;
649 member->multicast.rec = *rec;
650 member->multicast.comp_mask = comp_mask;
651 member->multicast.callback = callback;
652 member->multicast.context = context;
653 init_completion(&member->comp);
654 atomic_set(&member->refcount, 1);
655 member->state = MCAST_JOINING;
657 member->group = acquire_group(&dev->port[port_num - dev->start_port],
659 if (!member->group) {
670 multicast = &member->multicast;
671 queue_join(member);
676 kfree(member);
683 struct mcast_member *member;
686 member = container_of(multicast, struct mcast_member, multicast);
687 group = member->group;
690 if (member->state == MCAST_MEMBER)
693 list_del_init(&member->list);
705 deref_member(member);
706 wait_for_completion(&member->comp);
707 ib_sa_client_put(member->client);
708 kfree(member);