Skip site navigation (1)Skip section navigation (2)
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>