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()
236 const struct pernet_operations *ops, *saved_ops; in setup_net() local
246 list_for_each_entry(ops, &pernet_list, list) { in setup_net()
247 error = ops_init(ops, net); in setup_net()
259 saved_ops = ops; in setup_net()
260 list_for_each_entry_continue_reverse(ops, &pernet_list, list) in setup_net()
261 ops_exit_list(ops, &net_exit_list); in setup_net()
263 ops = saved_ops; in setup_net()
264 list_for_each_entry_continue_reverse(ops, &pernet_list, list) in setup_net()
265 ops_free_list(ops, &net_exit_list); in setup_net()
347 const struct pernet_operations *ops; in cleanup_net() local
385 list_for_each_entry_reverse(ops, &pernet_list, list) in cleanup_net()
386 ops_exit_list(ops, &net_exit_list); in cleanup_net()
389 list_for_each_entry_reverse(ops, &pernet_list, list) in cleanup_net()
390 ops_free_list(ops, &net_exit_list); in cleanup_net()
432 if (ns->ops == &netns_operations) in get_net_ns_by_fd()
474 net->ns.ops = &netns_operations; in net_ns_net_init()
731 struct pernet_operations *ops) in __register_pernet_operations() argument
737 list_add_tail(&ops->list, list); in __register_pernet_operations()
738 if (ops->init || (ops->id && ops->size)) { in __register_pernet_operations()
740 error = ops_init(ops, net); in __register_pernet_operations()
750 list_del(&ops->list); in __register_pernet_operations()
751 ops_exit_list(ops, &net_exit_list); in __register_pernet_operations()
752 ops_free_list(ops, &net_exit_list); in __register_pernet_operations()
756 static void __unregister_pernet_operations(struct pernet_operations *ops) in __unregister_pernet_operations() argument
761 list_del(&ops->list); in __unregister_pernet_operations()
764 ops_exit_list(ops, &net_exit_list); in __unregister_pernet_operations()
765 ops_free_list(ops, &net_exit_list); in __unregister_pernet_operations()
771 struct pernet_operations *ops) in __register_pernet_operations() argument
773 return ops_init(ops, &init_net); in __register_pernet_operations()
776 static void __unregister_pernet_operations(struct pernet_operations *ops) in __unregister_pernet_operations() argument
780 ops_exit_list(ops, &net_exit_list); in __unregister_pernet_operations()
781 ops_free_list(ops, &net_exit_list); in __unregister_pernet_operations()
789 struct pernet_operations *ops) in register_pernet_operations() argument
793 if (ops->id) { in register_pernet_operations()
795 error = ida_get_new_above(&net_generic_ids, 1, ops->id); in register_pernet_operations()
803 max_gen_ptrs = max_t(unsigned int, max_gen_ptrs, *ops->id); in register_pernet_operations()
805 error = __register_pernet_operations(list, ops); in register_pernet_operations()
808 if (ops->id) in register_pernet_operations()
809 ida_remove(&net_generic_ids, *ops->id); in register_pernet_operations()
815 static void unregister_pernet_operations(struct pernet_operations *ops) in unregister_pernet_operations() argument
818 __unregister_pernet_operations(ops); in unregister_pernet_operations()
820 if (ops->id) in unregister_pernet_operations()
821 ida_remove(&net_generic_ids, *ops->id); in unregister_pernet_operations()
843 int register_pernet_subsys(struct pernet_operations *ops) in register_pernet_subsys() argument
847 error = register_pernet_operations(first_device, ops); in register_pernet_subsys()
862 void unregister_pernet_subsys(struct pernet_operations *ops) in unregister_pernet_subsys() argument
865 unregister_pernet_operations(ops); in unregister_pernet_subsys()
889 int register_pernet_device(struct pernet_operations *ops) in register_pernet_device() argument
893 error = register_pernet_operations(&pernet_list, ops); in register_pernet_device()
895 first_device = &ops->list; in register_pernet_device()
910 void unregister_pernet_device(struct pernet_operations *ops) in unregister_pernet_device() argument
913 if (&ops->list == first_device) in unregister_pernet_device()
915 unregister_pernet_operations(ops); in unregister_pernet_device()