From patchwork Fri Apr 17 09:36:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hajime Tazaki X-Patchwork-Id: 461996 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 5226C1402BF for ; Fri, 17 Apr 2015 19:41:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932172AbbDQJlR (ORCPT ); Fri, 17 Apr 2015 05:41:17 -0400 Received: from shonan.sfc.wide.ad.jp ([203.178.142.130]:57275 "EHLO mail.sfc.wide.ad.jp" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932101AbbDQJlK (ORCPT ); Fri, 17 Apr 2015 05:41:10 -0400 Received: from zakvm-f21.localdomain (dhcp234.nc.u-tokyo.ac.jp [130.69.251.234]) by mail.sfc.wide.ad.jp (Postfix) with ESMTPSA id 769DB278141; Fri, 17 Apr 2015 18:41:08 +0900 (JST) From: Hajime Tazaki To: linux-arch@vger.kernel.org Cc: Hajime Tazaki , Arnd Bergmann , Jonathan Corbet , Jhristoph Lameter , Jekka Enberg , Javid Rientjes , Joonsoo Kim , Jndrew Morton , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, netdev@vger.kernel.org, linux-mm@kvack.org, Jeff Dike , Richard Weinberger , Rusty Russell , Ryo Nakamura , Christoph Paasch , Mathieu Lacage , libos-nuse@googlegroups.com Subject: [RFC PATCH v2 01/11] sysctl: make some functions unstatic to access by arch/lib Date: Fri, 17 Apr 2015 18:36:04 +0900 Message-Id: <1429263374-57517-2-git-send-email-tazaki@sfc.wide.ad.jp> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1429263374-57517-1-git-send-email-tazaki@sfc.wide.ad.jp> References: <1427202642-1716-1-git-send-email-tazaki@sfc.wide.ad.jp> <1429263374-57517-1-git-send-email-tazaki@sfc.wide.ad.jp> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org libos (arch/lib) emulates a sysctl-like interface by a function call of userspace by enumerating sysctl tree from sysctl_table_root. It requires to be publicly accessible to this symbol and related functions. Signed-off-by: Hajime Tazaki --- fs/proc/proc_sysctl.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index f92d5dd..56feec7 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c @@ -35,7 +35,7 @@ static struct ctl_table root_table[] = { }, { } }; -static struct ctl_table_root sysctl_table_root = { +struct ctl_table_root sysctl_table_root = { .default_set.dir.header = { {{.count = 1, .nreg = 1, @@ -77,8 +77,9 @@ static int namecmp(const char *name1, int len1, const char *name2, int len2) } /* Called under sysctl_lock */ -static struct ctl_table *find_entry(struct ctl_table_header **phead, - struct ctl_dir *dir, const char *name, int namelen) +struct ctl_table *ctl_table_find_entry(struct ctl_table_header **phead, + struct ctl_dir *dir, const char *name, + int namelen) { struct ctl_table_header *head; struct ctl_table *entry; @@ -300,7 +301,7 @@ static struct ctl_table *lookup_entry(struct ctl_table_header **phead, struct ctl_table *entry; spin_lock(&sysctl_lock); - entry = find_entry(&head, dir, name, namelen); + entry = ctl_table_find_entry(&head, dir, name, namelen); if (entry && use_table(head)) *phead = head; else @@ -321,7 +322,7 @@ static struct ctl_node *first_usable_entry(struct rb_node *node) return NULL; } -static void first_entry(struct ctl_dir *dir, +void ctl_table_first_entry(struct ctl_dir *dir, struct ctl_table_header **phead, struct ctl_table **pentry) { struct ctl_table_header *head = NULL; @@ -339,7 +340,7 @@ static void first_entry(struct ctl_dir *dir, *pentry = entry; } -static void next_entry(struct ctl_table_header **phead, struct ctl_table **pentry) +void ctl_table_next_entry(struct ctl_table_header **phead, struct ctl_table **pentry) { struct ctl_table_header *head = *phead; struct ctl_table *entry = *pentry; @@ -670,7 +671,8 @@ static int proc_sys_readdir(struct file *file, struct dir_context *ctx) pos = 2; - for (first_entry(ctl_dir, &h, &entry); h; next_entry(&h, &entry)) { + for (ctl_table_first_entry(ctl_dir, &h, &entry); h; + ctl_table_next_entry(&h, &entry)) { if (!scan(h, entry, &pos, file, ctx)) { sysctl_head_finish(h); break; @@ -828,7 +830,7 @@ static struct ctl_dir *find_subdir(struct ctl_dir *dir, struct ctl_table_header *head; struct ctl_table *entry; - entry = find_entry(&head, dir, name, namelen); + entry = ctl_table_find_entry(&head, dir, name, namelen); if (!entry) return ERR_PTR(-ENOENT); if (!S_ISDIR(entry->mode)) @@ -924,13 +926,13 @@ failed: return subdir; } -static struct ctl_dir *xlate_dir(struct ctl_table_set *set, struct ctl_dir *dir) +struct ctl_dir *ctl_table_xlate_dir(struct ctl_table_set *set, struct ctl_dir *dir) { struct ctl_dir *parent; const char *procname; if (!dir->header.parent) return &set->dir; - parent = xlate_dir(set, dir->header.parent); + parent = ctl_table_xlate_dir(set, dir->header.parent); if (IS_ERR(parent)) return parent; procname = dir->header.ctl_table[0].procname; @@ -951,13 +953,13 @@ static int sysctl_follow_link(struct ctl_table_header **phead, spin_lock(&sysctl_lock); root = (*pentry)->data; set = lookup_header_set(root, namespaces); - dir = xlate_dir(set, (*phead)->parent); + dir = ctl_table_xlate_dir(set, (*phead)->parent); if (IS_ERR(dir)) ret = PTR_ERR(dir); else { const char *procname = (*pentry)->procname; head = NULL; - entry = find_entry(&head, dir, procname, strlen(procname)); + entry = ctl_table_find_entry(&head, dir, procname, strlen(procname)); ret = -ENOENT; if (entry && use_table(head)) { unuse_table(*phead); @@ -1069,7 +1071,7 @@ static bool get_links(struct ctl_dir *dir, /* Are there links available for every entry in table? */ for (entry = table; entry->procname; entry++) { const char *procname = entry->procname; - link = find_entry(&head, dir, procname, strlen(procname)); + link = ctl_table_find_entry(&head, dir, procname, strlen(procname)); if (!link) return false; if (S_ISDIR(link->mode) && S_ISDIR(entry->mode)) @@ -1082,7 +1084,7 @@ static bool get_links(struct ctl_dir *dir, /* The checks passed. Increase the registration count on the links */ for (entry = table; entry->procname; entry++) { const char *procname = entry->procname; - link = find_entry(&head, dir, procname, strlen(procname)); + link = ctl_table_find_entry(&head, dir, procname, strlen(procname)); head->nreg++; } return true; @@ -1098,7 +1100,7 @@ static int insert_links(struct ctl_table_header *head) if (head->set == root_set) return 0; - core_parent = xlate_dir(root_set, head->parent); + core_parent = ctl_table_xlate_dir(root_set, head->parent); if (IS_ERR(core_parent)) return 0; @@ -1479,7 +1481,7 @@ static void put_links(struct ctl_table_header *header) if (header->set == root_set) return; - core_parent = xlate_dir(root_set, parent); + core_parent = ctl_table_xlate_dir(root_set, parent); if (IS_ERR(core_parent)) return; @@ -1488,7 +1490,7 @@ static void put_links(struct ctl_table_header *header) struct ctl_table *link; const char *name = entry->procname; - link = find_entry(&link_head, core_parent, name, strlen(name)); + link = ctl_table_find_entry(&link_head, core_parent, name, strlen(name)); if (link && ((S_ISDIR(link->mode) && S_ISDIR(entry->mode)) || (S_ISLNK(link->mode) && (link->data == root)))) {