nl_table[i].p_ops = &netlink_ops;  
static int __init netlink_proto_init(void){	struct sk_buff *dummy_skb;	int i;	unsigned long max;	unsigned int order;	int err = proto_register(&netlink_proto, 0);	if (err != 0)		goto out;	if (sizeof(struct netlink_skb_parms) > sizeof(dummy_skb->cb))		netlink_skb_parms_too_large();	nl_table = kmalloc(sizeof(*nl_table) * MAX_LINKS, GFP_KERNEL);	if (!nl_table) {enomem:		printk(KERN_CRIT "netlink_init: Cannot allocate nl_table\n");		return -ENOMEM;	}	memset(nl_table, 0, sizeof(*nl_table) * MAX_LINKS);	if (num_physpages >= (128 * 1024))		max = num_physpages >> (21 - PAGE_SHIFT);	else		max = num_physpages >> (23 - PAGE_SHIFT);	order = get_bitmask_order(max) - 1 + PAGE_SHIFT;	max = (1UL << order) / sizeof(struct hlist_head);	order = get_bitmask_order(max > UINT_MAX ? UINT_MAX : max) - 1;	for (i = 0; i < MAX_LINKS; i++) {		struct nl_pid_hash *hash = &nl_table[i].hash;		nl_table[i].p_ops = &netlink_ops;		hash->table = nl_pid_hash_alloc(1 * sizeof(*hash->table));		if (!hash->table) {			while (i-- > 0)				nl_pid_hash_free(nl_table[i].hash.table,						 1 * sizeof(*hash->table));			kfree(nl_table);			goto enomem;		}		memset(hash->table, 0, 1 * sizeof(*hash->table));		hash->max_shift = order;		hash->shift = 0;		hash->mask = 0;		hash->rehash_time = jiffies;	}	sock_register(&netlink_family_ops);#ifdef CONFIG_PROC_FS	proc_net_fops_create("netlink", 0, &netlink_seq_fops);#endif	/* The netlink device handler may be needed early. */ 	rtnetlink_init();out:	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/77247bbb3094246be9d057e7be442cc708f123a8/af_netlink.c/clean/net/netlink/af_netlink.c