Lines Matching refs:head

28 static bool is_empty_dir(struct ctl_table_header *head)  in is_empty_dir()  argument
30 return head->ctl_table[0].child == sysctl_mount_point; in is_empty_dir()
76 static int insert_links(struct ctl_table_header *head);
105 struct ctl_table_header *head; in find_entry() local
116 head = ctl_node->header; in find_entry()
117 entry = &head->ctl_table[ctl_node - head->node]; in find_entry()
126 *phead = head; in find_entry()
133 static int insert_entry(struct ctl_table_header *head, struct ctl_table *entry) in insert_entry() argument
135 struct rb_node *node = &head->node[entry - head->ctl_table].node; in insert_entry()
136 struct rb_node **p = &head->parent->root.rb_node; in insert_entry()
161 sysctl_print_dir(head->parent); in insert_entry()
168 rb_insert_color(node, &head->parent->root); in insert_entry()
172 static void erase_entry(struct ctl_table_header *head, struct ctl_table *entry) in erase_entry() argument
174 struct rb_node *node = &head->node[entry - head->ctl_table].node; in erase_entry()
176 rb_erase(node, &head->parent->root); in erase_entry()
179 static void init_header(struct ctl_table_header *head, in init_header() argument
183 head->ctl_table = table; in init_header()
184 head->ctl_table_arg = table; in init_header()
185 head->used = 0; in init_header()
186 head->count = 1; in init_header()
187 head->nreg = 1; in init_header()
188 head->unregistering = NULL; in init_header()
189 head->root = root; in init_header()
190 head->set = set; in init_header()
191 head->parent = NULL; in init_header()
192 head->node = node; in init_header()
196 node->header = head; in init_header()
200 static void erase_header(struct ctl_table_header *head) in erase_header() argument
203 for (entry = head->ctl_table; entry->procname; entry++) in erase_header()
204 erase_entry(head, entry); in erase_header()
287 static void sysctl_head_get(struct ctl_table_header *head) in sysctl_head_get() argument
290 head->count++; in sysctl_head_get()
294 void sysctl_head_put(struct ctl_table_header *head) in sysctl_head_put() argument
297 if (!--head->count) in sysctl_head_put()
298 kfree_rcu(head, rcu); in sysctl_head_put()
302 static struct ctl_table_header *sysctl_head_grab(struct ctl_table_header *head) in sysctl_head_grab() argument
304 BUG_ON(!head); in sysctl_head_grab()
306 if (!use_table(head)) in sysctl_head_grab()
307 head = ERR_PTR(-ENOENT); in sysctl_head_grab()
309 return head; in sysctl_head_grab()
312 static void sysctl_head_finish(struct ctl_table_header *head) in sysctl_head_finish() argument
314 if (!head) in sysctl_head_finish()
317 unuse_table(head); in sysctl_head_finish()
334 struct ctl_table_header *head; in lookup_entry() local
338 entry = find_entry(&head, dir, name, namelen); in lookup_entry()
339 if (entry && use_table(head)) in lookup_entry()
340 *phead = head; in lookup_entry()
362 struct ctl_table_header *head = NULL; in first_entry() local
370 head = ctl_node->header; in first_entry()
371 entry = &head->ctl_table[ctl_node - head->node]; in first_entry()
373 *phead = head; in first_entry()
379 struct ctl_table_header *head = *phead; in next_entry() local
381 struct ctl_node *ctl_node = &head->node[entry - head->ctl_table]; in next_entry()
384 unuse_table(head); in next_entry()
388 head = NULL; in next_entry()
390 head = ctl_node->header; in next_entry()
391 entry = &head->ctl_table[ctl_node - head->node]; in next_entry()
393 *phead = head; in next_entry()
417 static int sysctl_perm(struct ctl_table_header *head, struct ctl_table *table, int op) in sysctl_perm() argument
419 struct ctl_table_root *root = head->root; in sysctl_perm()
423 mode = root->permissions(head, table); in sysctl_perm()
431 struct ctl_table_header *head, struct ctl_table *table) in proc_sys_make_inode() argument
442 sysctl_head_get(head); in proc_sys_make_inode()
444 ei->sysctl = head; in proc_sys_make_inode()
457 if (is_empty_dir(head)) in proc_sys_make_inode()
466 struct ctl_table_header *head = PROC_I(inode)->sysctl; in grab_header() local
467 if (!head) in grab_header()
468 head = &sysctl_table_root.default_set.dir.header; in grab_header()
469 return sysctl_head_grab(head); in grab_header()
475 struct ctl_table_header *head = grab_header(dir); in proc_sys_lookup() local
484 if (IS_ERR(head)) in proc_sys_lookup()
485 return ERR_CAST(head); in proc_sys_lookup()
487 ctl_dir = container_of(head, struct ctl_dir, header); in proc_sys_lookup()
501 inode = proc_sys_make_inode(dir->i_sb, h ? h : head, p); in proc_sys_lookup()
512 sysctl_head_finish(head); in proc_sys_lookup()
520 struct ctl_table_header *head = grab_header(inode); in proc_sys_call_handler() local
525 if (IS_ERR(head)) in proc_sys_call_handler()
526 return PTR_ERR(head); in proc_sys_call_handler()
533 if (sysctl_perm(head, table, write ? MAY_WRITE : MAY_READ)) in proc_sys_call_handler()
547 sysctl_head_finish(head); in proc_sys_call_handler()
566 struct ctl_table_header *head = grab_header(inode); in proc_sys_open() local
570 if (IS_ERR(head)) in proc_sys_open()
571 return PTR_ERR(head); in proc_sys_open()
576 sysctl_head_finish(head); in proc_sys_open()
584 struct ctl_table_header *head = grab_header(inode); in proc_sys_poll() local
590 if (IS_ERR(head)) in proc_sys_poll()
608 sysctl_head_finish(head); in proc_sys_poll()
615 struct ctl_table_header *head, in proc_sys_fill_cache() argument
632 inode = proc_sys_make_inode(dir->d_sb, head, table); in proc_sys_fill_cache()
653 struct ctl_table_header *head, in proc_sys_link_fill_cache() argument
657 head = sysctl_head_grab(head); in proc_sys_link_fill_cache()
661 int err = sysctl_follow_link(&head, &table, current->nsproxy); in proc_sys_link_fill_cache()
666 ret = proc_sys_fill_cache(file, ctx, head, table); in proc_sys_link_fill_cache()
668 sysctl_head_finish(head); in proc_sys_link_fill_cache()
672 static int scan(struct ctl_table_header *head, struct ctl_table *table, in scan() argument
682 res = proc_sys_link_fill_cache(file, ctx, head, table); in scan()
684 res = proc_sys_fill_cache(file, ctx, head, table); in scan()
694 struct ctl_table_header *head = grab_header(file_inode(file)); in proc_sys_readdir() local
700 if (IS_ERR(head)) in proc_sys_readdir()
701 return PTR_ERR(head); in proc_sys_readdir()
703 ctl_dir = container_of(head, struct ctl_dir, header); in proc_sys_readdir()
716 sysctl_head_finish(head); in proc_sys_readdir()
726 struct ctl_table_header *head; in proc_sys_permission() local
734 head = grab_header(inode); in proc_sys_permission()
735 if (IS_ERR(head)) in proc_sys_permission()
736 return PTR_ERR(head); in proc_sys_permission()
742 error = sysctl_perm(head, table, mask & ~MAY_NOT_BLOCK); in proc_sys_permission()
744 sysctl_head_finish(head); in proc_sys_permission()
768 struct ctl_table_header *head = grab_header(inode); in proc_sys_getattr() local
771 if (IS_ERR(head)) in proc_sys_getattr()
772 return PTR_ERR(head); in proc_sys_getattr()
778 sysctl_head_finish(head); in proc_sys_getattr()
839 struct ctl_table_header *head; in proc_sys_compare() local
852 head = rcu_dereference(PROC_I(inode)->sysctl); in proc_sys_compare()
853 return !head || !sysctl_is_seen(head); in proc_sys_compare()
865 struct ctl_table_header *head; in find_subdir() local
868 entry = find_entry(&head, dir, name, namelen); in find_subdir()
873 return container_of(head, struct ctl_dir, header); in find_subdir()
980 struct ctl_table_header *head; in sysctl_follow_link() local
996 head = NULL; in sysctl_follow_link()
997 entry = find_entry(&head, dir, procname, strlen(procname)); in sysctl_follow_link()
999 if (entry && use_table(head)) { in sysctl_follow_link()
1001 *phead = head; in sysctl_follow_link()
1103 struct ctl_table_header *head; in get_links() local
1109 link = find_entry(&head, dir, procname, strlen(procname)); in get_links()
1122 link = find_entry(&head, dir, procname, strlen(procname)); in get_links()
1123 head->nreg++; in get_links()
1128 static int insert_links(struct ctl_table_header *head) in insert_links() argument
1135 if (head->set == root_set) in insert_links()
1138 core_parent = xlate_dir(root_set, head->parent); in insert_links()
1142 if (get_links(core_parent, head->ctl_table, head->root)) in insert_links()
1148 links = new_links(core_parent, head->ctl_table, head->root); in insert_links()
1156 if (get_links(core_parent, head->ctl_table, head->root)) { in insert_links()