if (new_ra) kfree(new_ra); 
kfree(new_ra); 
DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics) __read_mostly;static struct packet_type ipv6_packet_type = {	.type = __constant_htons(ETH_P_IPV6), 	.func = ipv6_rcv,};struct ip6_ra_chain *ip6_ra_chain;DEFINE_RWLOCK(ip6_ra_lock);int ip6_ra_control(struct sock *sk, int sel, void (*destructor)(struct sock *)){	struct ip6_ra_chain *ra, *new_ra, **rap;	/* RA packet may be delivered ONLY to IPPROTO_RAW socket */	if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num != IPPROTO_RAW)		return -EINVAL;	new_ra = (sel>=0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;	write_lock_bh(&ip6_ra_lock);	for (rap = &ip6_ra_chain; (ra=*rap) != NULL; rap = &ra->next) {		if (ra->sk == sk) {			if (sel>=0) {				write_unlock_bh(&ip6_ra_lock);				if (new_ra)					kfree(new_ra);				return -EADDRINUSE;			}			*rap = ra->next;			write_unlock_bh(&ip6_ra_lock);			if (ra->destructor)				ra->destructor(sk);			sock_put(sk);			kfree(ra);			return 0;		}	}	if (new_ra == NULL) {		write_unlock_bh(&ip6_ra_lock);		return -ENOBUFS;	}	new_ra->sk = sk;	new_ra->sel = sel;	new_ra->destructor = destructor;	new_ra->next = ra;	*rap = new_ra;	sock_hold(sk);	write_unlock_bh(&ip6_ra_lock);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/a51482bde22f99c63fbbb57d5d46cc666384e379/ipv6_sockglue.c/clean/net/ipv6/ipv6_sockglue.c