Lines Matching refs:head

38 static bool is_empty_dir(struct ctl_table_header *head)
40 return head->ctl_table[0].child == sysctl_mount_point;
86 static int insert_links(struct ctl_table_header *head);
115 struct ctl_table_header *head;
126 head = ctl_node->header;
127 entry = &head->ctl_table[ctl_node - head->node];
136 *phead = head;
143 static int insert_entry(struct ctl_table_header *head, struct ctl_table *entry)
145 struct rb_node *node = &head->node[entry - head->ctl_table].node;
146 struct rb_node **p = &head->parent->root.rb_node;
171 sysctl_print_dir(head->parent);
178 rb_insert_color(node, &head->parent->root);
182 static void erase_entry(struct ctl_table_header *head, struct ctl_table *entry)
184 struct rb_node *node = &head->node[entry - head->ctl_table].node;
186 rb_erase(node, &head->parent->root);
189 static void init_header(struct ctl_table_header *head,
193 head->ctl_table = table;
194 head->ctl_table_arg = table;
195 head->used = 0;
196 head->count = 1;
197 head->nreg = 1;
198 head->unregistering = NULL;
199 head->root = root;
200 head->set = set;
201 head->parent = NULL;
202 head->node = node;
203 INIT_HLIST_HEAD(&head->inodes);
207 node->header = head;
211 static void erase_header(struct ctl_table_header *head)
214 for (entry = head->ctl_table; entry->procname; entry++)
215 erase_entry(head, entry);
273 static void proc_sys_invalidate_dcache(struct ctl_table_header *head)
275 proc_invalidate_siblings_dcache(&head->inodes, &sysctl_lock);
309 static struct ctl_table_header *sysctl_head_grab(struct ctl_table_header *head)
311 BUG_ON(!head);
313 if (!use_table(head))
314 head = ERR_PTR(-ENOENT);
316 return head;
319 static void sysctl_head_finish(struct ctl_table_header *head)
321 if (!head)
324 unuse_table(head);
341 struct ctl_table_header *head;
345 entry = find_entry(&head, dir, name, namelen);
346 if (entry && use_table(head))
347 *phead = head;
369 struct ctl_table_header *head = NULL;
377 head = ctl_node->header;
378 entry = &head->ctl_table[ctl_node - head->node];
380 *phead = head;
386 struct ctl_table_header *head = *phead;
388 struct ctl_node *ctl_node = &head->node[entry - head->ctl_table];
391 unuse_table(head);
395 head = NULL;
397 head = ctl_node->header;
398 entry = &head->ctl_table[ctl_node - head->node];
400 *phead = head;
420 static int sysctl_perm(struct ctl_table_header *head, struct ctl_table *table, int op)
422 struct ctl_table_root *root = head->root;
426 mode = root->permissions(head, table);
434 struct ctl_table_header *head, struct ctl_table *table)
436 struct ctl_table_root *root = head->root;
449 if (unlikely(head->unregistering)) {
454 ei->sysctl = head;
456 hlist_add_head_rcu(&ei->sibling_inodes, &head->inodes);
457 head->count++;
470 if (is_empty_dir(head))
477 root->set_ownership(head, table, &inode->i_uid, &inode->i_gid);
482 void proc_sys_evict_inode(struct inode *inode, struct ctl_table_header *head)
486 if (!--head->count)
487 kfree_rcu(head, rcu);
493 struct ctl_table_header *head = PROC_I(inode)->sysctl;
494 if (!head)
495 head = &sysctl_table_root.default_set.dir.header;
496 return sysctl_head_grab(head);
502 struct ctl_table_header *head = grab_header(dir);
511 if (IS_ERR(head))
512 return ERR_CAST(head);
514 ctl_dir = container_of(head, struct ctl_dir, header);
527 inode = proc_sys_make_inode(dir->i_sb, h ? h : head, p);
539 sysctl_head_finish(head);
547 struct ctl_table_header *head = grab_header(inode);
553 if (IS_ERR(head))
554 return PTR_ERR(head);
561 if (sysctl_perm(head, table, write ? MAY_WRITE : MAY_READ))
584 error = BPF_CGROUP_RUN_PROG_SYSCTL(head, table, write, &kbuf, &count,
604 sysctl_head_finish(head);
621 struct ctl_table_header *head = grab_header(inode);
625 if (IS_ERR(head))
626 return PTR_ERR(head);
631 sysctl_head_finish(head);
639 struct ctl_table_header *head = grab_header(inode);
645 if (IS_ERR(head))
663 sysctl_head_finish(head);
670 struct ctl_table_header *head,
691 inode = proc_sys_make_inode(dir->d_sb, head, table);
719 struct ctl_table_header *head,
724 head = sysctl_head_grab(head);
725 if (IS_ERR(head))
729 if (sysctl_follow_link(&head, &table))
732 ret = proc_sys_fill_cache(file, ctx, head, table);
734 sysctl_head_finish(head);
738 static int scan(struct ctl_table_header *head, struct ctl_table *table,
748 res = proc_sys_link_fill_cache(file, ctx, head, table);
750 res = proc_sys_fill_cache(file, ctx, head, table);
760 struct ctl_table_header *head = grab_header(file_inode(file));
766 if (IS_ERR(head))
767 return PTR_ERR(head);
769 ctl_dir = container_of(head, struct ctl_dir, header);
783 sysctl_head_finish(head);
793 struct ctl_table_header *head;
801 head = grab_header(inode);
802 if (IS_ERR(head))
803 return PTR_ERR(head);
809 error = sysctl_perm(head, table, mask & ~MAY_NOT_BLOCK);
811 sysctl_head_finish(head);
836 struct ctl_table_header *head = grab_header(inode);
839 if (IS_ERR(head))
840 return PTR_ERR(head);
846 sysctl_head_finish(head);
909 struct ctl_table_header *head;
922 head = rcu_dereference(PROC_I(inode)->sysctl);
923 return !head || !sysctl_is_seen(head);
935 struct ctl_table_header *head;
938 entry = find_entry(&head, dir, name, namelen);
943 return container_of(head, struct ctl_dir, header);
1050 struct ctl_table_header *head;
1066 head = NULL;
1067 entry = find_entry(&head, dir, procname, strlen(procname));
1069 if (entry && use_table(head)) {
1071 *phead = head;
1196 struct ctl_table_header *head;
1202 link = find_entry(&head, dir, procname, strlen(procname));
1215 link = find_entry(&head, dir, procname, strlen(procname));
1216 head->nreg++;
1221 static int insert_links(struct ctl_table_header *head)
1228 if (head->set == root_set)
1231 core_parent = xlate_dir(root_set, head->parent);
1235 if (get_links(core_parent, head->ctl_table, head->root))
1241 links = new_links(core_parent, head->ctl_table, head->root);
1249 if (get_links(core_parent, head->ctl_table, head->root)) {