} else 
} else { 
int ip6_mc_msfilter(struct sock *sk, struct group_filter *gsf){	struct in6_addr *group;	struct ipv6_mc_socklist *pmc;	struct net_device *dev;	struct inet6_dev *idev;	struct ipv6_pinfo *inet6 = inet6_sk(sk);	struct ip6_sf_socklist *newpsl, *psl;	int leavegroup = 0;	int i, err;	group = &((struct sockaddr_in6 *)&gsf->gf_group)->sin6_addr;	if (!ipv6_addr_is_multicast(group))		return -EINVAL;	if (gsf->gf_fmode != MCAST_INCLUDE &&	    gsf->gf_fmode != MCAST_EXCLUDE)		return -EINVAL;	idev = ip6_mc_find_dev(group, gsf->gf_interface);	if (!idev)		return -ENODEV;	dev = idev->dev;	err = 0;	if (gsf->gf_fmode == MCAST_INCLUDE && gsf->gf_numsrc == 0) {		leavegroup = 1;		goto done;	}	for (pmc=inet6->ipv6_mc_list; pmc; pmc=pmc->next) {		if (pmc->ifindex != gsf->gf_interface)			continue;		if (ipv6_addr_equal(&pmc->addr, group))			break;	}	if (!pmc) {		/* must have a prior join */		err = -EINVAL;		goto done;	}	if (gsf->gf_numsrc) {		newpsl = (struct ip6_sf_socklist *)sock_kmalloc(sk,				IP6_SFLSIZE(gsf->gf_numsrc), GFP_ATOMIC);		if (!newpsl) {			err = -ENOBUFS;			goto done;		}		newpsl->sl_max = newpsl->sl_count = gsf->gf_numsrc;		for (i=0; i<newpsl->sl_count; ++i) {			struct sockaddr_in6 *psin6;			psin6 = (struct sockaddr_in6 *)&gsf->gf_slist[i];			newpsl->sl_addr[i] = psin6->sin6_addr;		}		err = ip6_mc_add_src(idev, group, gsf->gf_fmode,			newpsl->sl_count, newpsl->sl_addr, 0);		if (err) {			sock_kfree_s(sk, newpsl, IP6_SFLSIZE(newpsl->sl_max));			goto done;		}	} else		newpsl = NULL;	psl = pmc->sflist;	if (psl) {		(void) ip6_mc_del_src(idev, group, pmc->sfmode,			psl->sl_count, psl->sl_addr, 0);		sock_kfree_s(sk, psl, IP6_SFLSIZE(psl->sl_max));	} else		(void) ip6_mc_del_src(idev, group, pmc->sfmode, 0, NULL, 0);	pmc->sflist = newpsl;	pmc->sfmode = gsf->gf_fmode;	err = 0;done:	read_unlock_bh(&idev->lock);	in6_dev_put(idev);	dev_put(dev);	if (leavegroup)		err = ipv6_sock_mc_drop(sk, gsf->gf_interface, group);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8713dbf05754aa777f31bf491cb60a111f7ad828/mcast.c/clean/net/ipv6/mcast.c