svn commit: r194829 - in projects/libprocstat/sys: kern sys
Ulf Lilleengen
lulf at FreeBSD.org
Wed Jun 24 12:07:41 UTC 2009
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. */
More information about the svn-src-projects
mailing list