/* Add multicast single-source filter to the interface list  */
static int ip6_mc_add1_src(struct ifmcaddr6 *pmc, int sfmode, struct in6_addr *psfsrc, int delta)
/* Add multicast single-source filter to the interface list  */
static int ip6_mc_add1_src(struct ifmcaddr6 *pmc, int sfmode, struct in6_addr *psfsrc, int delta)
{
	struct ip6_sf_list *psf, *psf_prev;
	psf_prev = NULL;
	for (psf=pmc->mca_sources; psf; psf=psf->sf_next) {
		if (ipv6_addr_equal(&psf->sf_addr, psfsrc))
			break;
		psf_prev = psf;
	}
	if (!psf) {
		psf = kzalloc(sizeof(*psf), GFP_ATOMIC);
		if (!psf)
			return -ENOBUFS;
		psf->sf_addr = *psfsrc;
		if (psf_prev) {
			psf_prev->sf_next = psf;
		} else
			pmc->mca_sources = psf;
	}
	psf->sf_count[sfmode]++;
	return 0;
}