lkml.org 
[lkml]   [2015]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 01/10] sysctl: make some functions unstatic to access by arch/lib
    Date
    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 <tazaki@sfc.wide.ad.jp>
    ---
    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 fea2561..7c5924c 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)))) {
    --
    2.1.0


    \
     
     \ /
      Last update: 2015-04-27 05:21    [W:3.491 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site