lkml.org 
[lkml]   [2008]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] proc: extend /proc/<pid>/fdinfo/<fd>
    Hi Miklos,

    <quote sender="Miklos Szeredi">
    > On Sat, 2008-02-09 at 20:01 +0800, Eugene Teo wrote:
    > > This patch extends /proc/<pid>/fdinfo/<fd> to report information about open
    > > files, and pathname. This information can be useful to know when debugging an
    > > application.
    > >
    > > For each file descriptor, the information is provided in the following format:
    > >
    > > kerndev: ~/code/kernel# cat /proc/`pgrep pickup`/fdinfo/6
    > > mode: 0622
    > > dev: 253,0
    > > ino: 21463057
    >
    > These are already available via 'stat /proc/<pid>/fd/<fd>'
    >
    > > uid: 89
    > > gid: 89
    >
    > AFAICS file->f_[ug]id are only used by the netfilter code, but I guess
    > it wouldn't hurt to show them here. But please add fields at the end of
    > the file, instead of the beggining.

    Ok, will do.

    > > rdev: 0,0
    >
    > This is in struct stat too.
    >
    > > pos: 0
    > > flags: 04002 FD_CLOEXEC # if close-on-exec flag is set
    >
    > FD_CLOEXEC should be on a separate line, because it's not an O_FOO flag.
    > > path: /var/spool/postfix/public/pickup
    >
    > readlink /proc/<pid>/fd/<fd>

    Thanks for the review. I agree that some of the information can be omitted
    since it can be accessed using stat and readlink. I still think it is useful
    to have ino in the output though.

    Here's the updated patch:

    [PATCH] proc: extend /proc/<pid>/fdinfo/<fd>

    This patch extends /proc/<pid>/fdinfo/<fd> to report information about open
    files, and pathname. This information can be useful to know when debugging an
    application.

    For each file descriptor, the information is provided in the following format:

    kerndev: ~/code/kernel$ cat /proc/`pgrep firefox-bin`/fdinfo/29
    pos: 49152
    flags: 02
    uid: 500
    gid: 500
    ino: 13205793
    fd_flags: FD_CLOEXEC # if close-on-exec flag is set

    Signed-off-by: Eugene Teo <eugeneteo@kernel.sg>
    ---
    fs/proc/base.c | 22 ++++++++++++++++++----
    1 file changed, 18 insertions(+), 4 deletions(-)

    diff --git a/fs/proc/base.c b/fs/proc/base.c
    index c59852b..5ea5dee 100644
    --- a/fs/proc/base.c
    +++ b/fs/proc/base.c
    @@ -1402,7 +1402,7 @@ out:
    return ~0U;
    }

    -#define PROC_FDINFO_MAX 64
    +#define PROC_FDINFO_MAX 128

    static int proc_fd_info(struct inode *inode, struct dentry **dentry,
    struct vfsmount **mnt, char *info)
    @@ -1428,12 +1428,26 @@ static int proc_fd_info(struct inode *inode, struct dentry **dentry,
    *mnt = mntget(file->f_path.mnt);
    if (dentry)
    *dentry = dget(file->f_path.dentry);
    - if (info)
    + /* called by proc_fdinfo_read() */
    + if (info) {
    + struct fdtable *fdt = files_fdtable(files);
    + struct dentry *d = dget(file->f_path.dentry);
    + int gcoe = FD_ISSET(fd, fdt->close_on_exec);
    +
    snprintf(info, PROC_FDINFO_MAX,
    "pos:\t%lli\n"
    - "flags:\t0%o\n",
    + "flags:\t0%o\n"
    + "uid:\t%d\n"
    + "gid:\t%d\n"
    + "ino:\t%ld\n"
    + "fd_flags:\t%s\n",
    (long long) file->f_pos,
    - file->f_flags);
    + file->f_flags,
    + file->f_uid, file->f_gid,
    + d->d_inode->i_ino,
    + gcoe ? "FD_CLOEXEC" : "0");
    + dput(d);
    + }
    spin_unlock(&files->file_lock);
    put_files_struct(files);
    return 0;


    \
     
     \ /
      Last update: 2008-02-11 15:39    [W:0.024 / U:30.252 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site