Date: Wed, 24 Jun 2009 12:07:25 +0000 (UTC) From: Ulf Lilleengen <lulf@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r194829 - in projects/libprocstat/sys: kern sys Message-ID: <200906241207.n5OC7PZx013705@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: lulf Date: Wed Jun 24 12:07:25 2009 New Revision: 194829 URL: http://svn.freebsd.org/changeset/base/194829 Log: - Add extra fields to kinfo_file that is needed by fstat, and export it in the kern.proc.filedesc sysctl. Modified: projects/libprocstat/sys/kern/kern_descrip.c projects/libprocstat/sys/sys/user.h Modified: projects/libprocstat/sys/kern/kern_descrip.c ============================================================================== --- projects/libprocstat/sys/kern/kern_descrip.c Wed Jun 24 12:06:15 2009 (r194828) +++ projects/libprocstat/sys/kern/kern_descrip.c Wed Jun 24 12:07:25 2009 (r194829) @@ -2887,6 +2887,7 @@ static int export_vnode_for_sysctl(struct vnode *vp, int type, struct kinfo_file *kif, struct filedesc *fdp, struct sysctl_req *req) { + struct vattr va; int error; char *fullpath, *freepath; int vfslocked; @@ -2913,7 +2914,14 @@ export_vnode_for_sysctl(struct vnode *vp freepath = NULL; fullpath = "-"; FILEDESC_SUNLOCK(fdp); + VOP_GETATTR(vp, &va, NULL); + kif->kf_fsid = va.va_fsid; + kif->kf_fileid = va.va_fileid; + kif->kf_mode = MAKEIMODE(va.va_type, va.va_mode); + kif->kf_size = va.va_size; + kif->kf_rdev = va.va_rdev; vn_fullpath(curthread, vp, &fullpath, &freepath); + vfslocked = VFS_LOCK_GIANT(vp->v_mount); vrele(vp); VFS_UNLOCK_GIANT(vfslocked); @@ -2940,6 +2948,7 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER struct filedesc *fdp; int error, i, *name; struct socket *so; + struct vattr va; struct vnode *vp; struct file *fp; struct proc *p; @@ -3087,6 +3096,12 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER freepath = NULL; fullpath = "-"; FILEDESC_SUNLOCK(fdp); + VOP_GETATTR(vp, &va, NULL); + kif->kf_fsid = va.va_fsid; + kif->kf_fileid = va.va_fileid; + kif->kf_mode = MAKEIMODE(va.va_type, va.va_mode); + kif->kf_size = va.va_size; + kif->kf_rdev = va.va_rdev; vn_fullpath(curthread, vp, &fullpath, &freepath); vfslocked = VFS_LOCK_GIANT(vp->v_mount); vrele(vp); Modified: projects/libprocstat/sys/sys/user.h ============================================================================== --- projects/libprocstat/sys/sys/user.h Wed Jun 24 12:06:15 2009 (r194828) +++ projects/libprocstat/sys/sys/user.h Wed Jun 24 12:07:25 2009 (r194829) @@ -307,7 +307,7 @@ struct kinfo_ofile { }; #if defined(__amd64__) || defined(__i386__) -#define KINFO_FILE_SIZE 1392 +#define KINFO_FILE_SIZE 1412 #endif struct kinfo_file { @@ -324,6 +324,11 @@ struct kinfo_file { int kf_sock_protocol; /* Socket protocol. */ struct sockaddr_storage kf_sa_local; /* Socket address. */ struct sockaddr_storage kf_sa_peer; /* Peer address. */ + long kf_fsid; /* Vnode filesystem id. */ + long kf_fileid; /* Global file id. */ + mode_t kf_mode; /* File mode. */ + u_long kf_size; /* File size. */ + dev_t kf_rdev; /* File device. */ int _kf_ispare[16]; /* Space for more stuff. */ /* Truncated before copyout in sysctl */ char kf_path[PATH_MAX]; /* Path to file, if any. */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906241207.n5OC7PZx013705>