Lines Matching refs:ops
93 static int ops_init(const struct pernet_operations *ops, struct net *net) in ops_init() argument
98 if (ops->id && ops->size) { in ops_init()
99 data = kzalloc(ops->size, GFP_KERNEL); in ops_init()
103 err = net_assign_generic(net, *ops->id, data); in ops_init()
108 if (ops->init) in ops_init()
109 err = ops->init(net); in ops_init()
120 static void ops_free(const struct pernet_operations *ops, struct net *net) in ops_free() argument
122 if (ops->id && ops->size) { in ops_free()
123 int id = *ops->id; in ops_free()
128 static void ops_exit_list(const struct pernet_operations *ops, in ops_exit_list() argument
132 if (ops->exit) { in ops_exit_list()
134 ops->exit(net); in ops_exit_list()
136 if (ops->exit_batch) in ops_exit_list()
137 ops->exit_batch(net_exit_list); in ops_exit_list()
140 static void ops_free_list(const struct pernet_operations *ops, in ops_free_list() argument
144 if (ops->size && ops->id) { in ops_free_list()
146 ops_free(ops, net); in ops_free_list()
275 const struct pernet_operations *ops, *saved_ops; in setup_net() local
286 list_for_each_entry(ops, &pernet_list, list) { in setup_net()
287 error = ops_init(ops, net); in setup_net()
299 saved_ops = ops; in setup_net()
300 list_for_each_entry_continue_reverse(ops, &pernet_list, list) in setup_net()
301 ops_exit_list(ops, &net_exit_list); in setup_net()
303 ops = saved_ops; in setup_net()
304 list_for_each_entry_continue_reverse(ops, &pernet_list, list) in setup_net()
305 ops_free_list(ops, &net_exit_list); in setup_net()
387 const struct pernet_operations *ops; in cleanup_net() local
430 list_for_each_entry_reverse(ops, &pernet_list, list) in cleanup_net()
431 ops_exit_list(ops, &net_exit_list); in cleanup_net()
434 list_for_each_entry_reverse(ops, &pernet_list, list) in cleanup_net()
435 ops_free_list(ops, &net_exit_list); in cleanup_net()
477 if (ns->ops == &netns_operations) in get_net_ns_by_fd()
519 net->ns.ops = &netns_operations; in net_ns_net_init()
772 struct pernet_operations *ops) in __register_pernet_operations() argument
778 list_add_tail(&ops->list, list); in __register_pernet_operations()
779 if (ops->init || (ops->id && ops->size)) { in __register_pernet_operations()
781 error = ops_init(ops, net); in __register_pernet_operations()
791 list_del(&ops->list); in __register_pernet_operations()
792 ops_exit_list(ops, &net_exit_list); in __register_pernet_operations()
793 ops_free_list(ops, &net_exit_list); in __register_pernet_operations()
797 static void __unregister_pernet_operations(struct pernet_operations *ops) in __unregister_pernet_operations() argument
802 list_del(&ops->list); in __unregister_pernet_operations()
805 ops_exit_list(ops, &net_exit_list); in __unregister_pernet_operations()
806 ops_free_list(ops, &net_exit_list); in __unregister_pernet_operations()
812 struct pernet_operations *ops) in __register_pernet_operations() argument
814 return ops_init(ops, &init_net); in __register_pernet_operations()
817 static void __unregister_pernet_operations(struct pernet_operations *ops) in __unregister_pernet_operations() argument
821 ops_exit_list(ops, &net_exit_list); in __unregister_pernet_operations()
822 ops_free_list(ops, &net_exit_list); in __unregister_pernet_operations()
830 struct pernet_operations *ops) in register_pernet_operations() argument
834 if (ops->id) { in register_pernet_operations()
836 error = ida_get_new_above(&net_generic_ids, 1, ops->id); in register_pernet_operations()
844 max_gen_ptrs = max_t(unsigned int, max_gen_ptrs, *ops->id); in register_pernet_operations()
846 error = __register_pernet_operations(list, ops); in register_pernet_operations()
849 if (ops->id) in register_pernet_operations()
850 ida_remove(&net_generic_ids, *ops->id); in register_pernet_operations()
856 static void unregister_pernet_operations(struct pernet_operations *ops) in unregister_pernet_operations() argument
859 __unregister_pernet_operations(ops); in unregister_pernet_operations()
861 if (ops->id) in unregister_pernet_operations()
862 ida_remove(&net_generic_ids, *ops->id); in unregister_pernet_operations()
884 int register_pernet_subsys(struct pernet_operations *ops) in register_pernet_subsys() argument
888 error = register_pernet_operations(first_device, ops); in register_pernet_subsys()
903 void unregister_pernet_subsys(struct pernet_operations *ops) in unregister_pernet_subsys() argument
906 unregister_pernet_operations(ops); in unregister_pernet_subsys()
930 int register_pernet_device(struct pernet_operations *ops) in register_pernet_device() argument
934 error = register_pernet_operations(&pernet_list, ops); in register_pernet_device()
936 first_device = &ops->list; in register_pernet_device()
951 void unregister_pernet_device(struct pernet_operations *ops) in unregister_pernet_device() argument
954 if (&ops->list == first_device) in unregister_pernet_device()
956 unregister_pernet_operations(ops); in unregister_pernet_device()