lkml.org 
[lkml]   [2009]   [Mar]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[RFC][PATCH 02/11] breakout fdinfo sprintf() into its own function
    From
    Date

    I'll be adding to this in a moment and it is in a bad place
    to do that cleanly now.

    Also, increase the buffer size. Most /proc files can
    output up to a page, so use the same here.

    Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
    ---

    linux-2.6.git-dave/fs/proc/base.c | 23 +++++++++++++++--------
    1 file changed, 15 insertions(+), 8 deletions(-)

    diff -puN fs/proc/base.c~breakout-fdinfo-sprintf fs/proc/base.c
    --- linux-2.6.git/fs/proc/base.c~breakout-fdinfo-sprintf 2009-03-05 08:37:00.000000000 -0800
    +++ linux-2.6.git-dave/fs/proc/base.c 2009-03-05 08:37:00.000000000 -0800
    @@ -1632,7 +1632,18 @@ out:
    return ~0U;
    }

    -#define PROC_FDINFO_MAX 64
    +#define PROC_FDINFO_MAX PAGE_SIZE
    +
    +static void proc_fd_write_info(struct file *file, char *info)
    +{
    + int max = PROC_FDINFO_MAX;
    + int p = 0;
    + if (!info)
    + return;
    +
    + p += scnprintf(info+p, max-p, "pos:\t%lli\n", (long long) file->f_pos);
    + p += scnprintf(info+p, max-p, "flags:\t0%o\n", file->f_flags);
    +}

    static int proc_fd_info(struct inode *inode, struct path *path, char *info)
    {
    @@ -1657,12 +1668,7 @@ static int proc_fd_info(struct inode *in
    *path = file->f_path;
    path_get(&file->f_path);
    }
    - if (info)
    - snprintf(info, PROC_FDINFO_MAX,
    - "pos:\t%lli\n"
    - "flags:\t0%o\n",
    - (long long) file->f_pos,
    - file->f_flags);
    + proc_fd_write_info(file, info);
    spin_unlock(&files->file_lock);
    put_files_struct(files);
    return 0;
    @@ -1870,10 +1876,11 @@ static int proc_readfd(struct file *filp
    static ssize_t proc_fdinfo_read(struct file *file, char __user *buf,
    size_t len, loff_t *ppos)
    {
    - char tmp[PROC_FDINFO_MAX];
    + char *tmp = kmalloc(PROC_FDINFO_MAX, GFP_KERNEL);
    int err = proc_fd_info(file->f_path.dentry->d_inode, NULL, tmp);
    if (!err)
    err = simple_read_from_buffer(buf, len, ppos, tmp, strlen(tmp));
    + kfree(tmp);
    return err;
    }

    _

    \
     
     \ /
      Last update: 2009-03-05 17:41    [W:0.028 / U:58.532 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site