static __net_init int proc_net_ns_init(struct net *net) { struct proc_dir_entry *netd, *net_statd; int err; err = -ENOMEM; netd = kzalloc(sizeof(*netd), GFP_KERNEL); if (!netd) goto out; netd->data = net; netd->nlink = 2; netd->name = "net"; netd->namelen = 3; netd->parent = &proc_root; err = -EEXIST; net_statd = proc_net_mkdir(net, "stat", netd); if (!net_statd) goto free_net; net->proc_net = netd; net->proc_net_stat = net_statd; return 0; free_net: kfree(netd); out: return err; }
int __net_init vlan_proc_init(struct net *net) { struct vlan_net *vn = net_generic(net, vlan_net_id); vn->proc_vlan_dir = proc_net_mkdir(net, name_root, net->proc_net); if (!vn->proc_vlan_dir) goto err; vn->proc_vlan_conf = proc_create(name_conf, S_IFREG|S_IRUSR|S_IWUSR, vn->proc_vlan_dir, &vlan_fops); if (!vn->proc_vlan_conf) goto err; return 0; err: pr_err("%s: can't create entry in proc filesystem!\n", __func__); vlan_proc_cleanup(net); return -ENOBUFS; }