Page MenuHomeFreeBSD

D18932.diff
No OneTemporary

D18932.diff

Index: head/lib/libprocstat/Symbol.map
===================================================================
--- head/lib/libprocstat/Symbol.map
+++ head/lib/libprocstat/Symbol.map
@@ -35,9 +35,12 @@
FBSD_1.5 {
procstat_freeptlwpinfo;
procstat_getptlwpinfo;
- procstat_get_pts_info;
procstat_get_sem_info;
procstat_get_shm_info;
procstat_get_socket_info;
+};
+
+FBSD_1.6 {
+ procstat_get_pts_info;
procstat_get_vnode_info;
};
Index: head/lib/libprocstat/libprocstat_compat.c
===================================================================
--- head/lib/libprocstat/libprocstat_compat.c
+++ head/lib/libprocstat/libprocstat_compat.c
@@ -36,9 +36,11 @@
#include "libprocstat.h"
+#define SPECNAMELEN_COMPAT12 63
+
struct freebsd11_ptsstat {
uint32_t dev;
- char devname[SPECNAMELEN + 1];
+ char devname[SPECNAMELEN_COMPAT12 + 1];
};
struct freebsd11_vnstat {
@@ -49,7 +51,7 @@
uint32_t vn_fsid;
int vn_type;
uint16_t vn_mode;
- char vn_devname[SPECNAMELEN + 1];
+ char vn_devname[SPECNAMELEN_COMPAT12 + 1];
};
struct freebsd11_semstat {
uint32_t value;
@@ -75,8 +77,25 @@
char dname[32];
};
+struct freebsd12_vnstat {
+ uint64_t vn_fileid;
+ uint64_t vn_size;
+ uint64_t vn_dev;
+ uint64_t vn_fsid;
+ char *vn_mntdir;
+ int vn_type;
+ uint16_t vn_mode;
+ char vn_devname[SPECNAMELEN_COMPAT12 + 1];
+};
+struct freebsd12_ptsstat {
+ uint64_t dev;
+ char devname[SPECNAMELEN_COMPAT12 + 1];
+};
+
int freebsd11_procstat_get_pts_info(struct procstat *procstat,
struct filestat *fst, struct freebsd11_ptsstat *pts, char *errbuf);
+int freebsd12_procstat_get_pts_info(struct procstat *procstat,
+ struct filestat *fst, struct freebsd12_ptsstat *pts_compat, char *errbuf);
int freebsd11_procstat_get_sem_info(struct procstat *procstat,
struct filestat *fst, struct freebsd11_semstat *sem, char *errbuf);
int freebsd11_procstat_get_shm_info(struct procstat *procstat,
@@ -85,7 +104,11 @@
struct filestat *fst, struct freebsd11_sockstat *sock, char *errbuf);
int freebsd11_procstat_get_vnode_info(struct procstat *procstat,
struct filestat *fst, struct freebsd11_vnstat *vn, char *errbuf);
+int freebsd12_procstat_get_vnode_info(struct procstat *procstat,
+ struct filestat *fst, struct freebsd12_vnstat *vn_compat, char *errbuf);
+static const char trunc_name[] = "<TRUNCATED>";
+
int
freebsd11_procstat_get_pts_info(struct procstat *procstat,
struct filestat *fst, struct freebsd11_ptsstat *pts_compat, char *errbuf)
@@ -97,12 +120,34 @@
if (r != 0)
return (r);
pts_compat->dev = pts.dev;
- memcpy(pts_compat->devname, pts.devname,
- sizeof(pts_compat->devname));
+ if (strlen(pts.devname) >= sizeof(pts_compat->devname))
+ strcpy(pts_compat->devname, trunc_name);
+ else
+ memcpy(pts_compat->devname, pts.devname,
+ sizeof(pts_compat->devname));
return (0);
}
int
+freebsd12_procstat_get_pts_info(struct procstat *procstat,
+ struct filestat *fst, struct freebsd12_ptsstat *pts_compat, char *errbuf)
+{
+ struct ptsstat pts;
+ int r;
+
+ r = procstat_get_pts_info(procstat, fst, &pts, errbuf);
+ if (r != 0)
+ return (r);
+ pts_compat->dev = pts.dev;
+ if (strlen(pts.devname) >= sizeof(pts_compat->devname))
+ strcpy(pts_compat->devname, trunc_name);
+ else
+ memcpy(pts_compat->devname, pts.devname,
+ sizeof(pts_compat->devname));
+ return (0);
+}
+
+int
freebsd11_procstat_get_sem_info(struct procstat *procstat,
struct filestat *fst, struct freebsd11_semstat *sem_compat, char *errbuf)
{
@@ -174,11 +219,39 @@
vn_compat->vn_fsid = vn.vn_fsid;
vn_compat->vn_type = vn.vn_type;
vn_compat->vn_mode = vn.vn_mode;
- memcpy(vn_compat->vn_devname, vn.vn_devname,
- sizeof(vn_compat->vn_devname));
+ if (strlen(vn.vn_devname) >= sizeof(vn_compat->vn_devname))
+ strcpy(vn_compat->vn_devname, trunc_name);
+ else
+ memcpy(vn_compat->vn_devname, vn.vn_devname,
+ sizeof(vn_compat->vn_devname));
return (0);
}
+int
+freebsd12_procstat_get_vnode_info(struct procstat *procstat,
+ struct filestat *fst, struct freebsd12_vnstat *vn_compat, char *errbuf)
+{
+ struct vnstat vn;
+ int r;
+
+ r = procstat_get_vnode_info(procstat, fst, &vn, errbuf);
+ if (r != 0)
+ return (r);
+ vn_compat->vn_fileid = vn.vn_fileid;
+ vn_compat->vn_size = vn.vn_size;
+ vn_compat->vn_mntdir = vn.vn_mntdir;
+ vn_compat->vn_dev = vn.vn_dev;
+ vn_compat->vn_fsid = vn.vn_fsid;
+ vn_compat->vn_type = vn.vn_type;
+ vn_compat->vn_mode = vn.vn_mode;
+ if (strlen(vn.vn_devname) >= sizeof(vn_compat->vn_devname))
+ strcpy(vn_compat->vn_devname, trunc_name);
+ else
+ memcpy(vn_compat->vn_devname, vn.vn_devname,
+ sizeof(vn_compat->vn_devname));
+ return (0);
+}
+
__sym_compat(procstat_get_pts_info, freebsd11_procstat_get_pts_info, FBSD_1.2);
__sym_compat(procstat_get_socket_info, freebsd11_procstat_get_socket_info,
FBSD_1.2);
@@ -186,3 +259,6 @@
FBSD_1.2);
__sym_compat(procstat_get_sem_info, freebsd11_procstat_get_sem_info, FBSD_1.3);
__sym_compat(procstat_get_shm_info, freebsd11_procstat_get_shm_info, FBSD_1.3);
+__sym_compat(procstat_get_pts_info, freebsd12_procstat_get_pts_info, FBSD_1.5);
+__sym_compat(procstat_get_vnode_info, freebsd12_procstat_get_vnode_info,
+ FBSD_1.5);
Index: head/sys/kern/kern_conf.c
===================================================================
--- head/sys/kern/kern_conf.c
+++ head/sys/kern/kern_conf.c
@@ -630,7 +630,7 @@
return (0);
}
- if (devsw->d_version != D_VERSION_03) {
+ if (devsw->d_version != D_VERSION_04) {
printf(
"WARNING: Device driver \"%s\" has wrong version %s\n",
devsw->d_name == NULL ? "???" : devsw->d_name,
Index: head/sys/sys/conf.h
===================================================================
--- head/sys/sys/conf.h
+++ head/sys/sys/conf.h
@@ -166,7 +166,8 @@
#define D_VERSION_01 0x17032005 /* Add d_uid,gid,mode & kind */
#define D_VERSION_02 0x28042009 /* Add d_mmap_single */
#define D_VERSION_03 0x17122009 /* d_mmap takes memattr,vm_ooffset_t */
-#define D_VERSION D_VERSION_03
+#define D_VERSION_04 0x5c48c353 /* SPECNAMELEN bumped to MAXNAMLEN */
+#define D_VERSION D_VERSION_04
/*
* Flags used for internal housekeeping
Index: head/sys/sys/param.h
===================================================================
--- head/sys/sys/param.h
+++ head/sys/sys/param.h
@@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1300009 /* Master, propagated to newvers */
+#define __FreeBSD_version 1300010 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
@@ -115,7 +115,7 @@
#define NOFILE OPEN_MAX /* max open files per process */
#define NOGROUP 65535 /* marker for empty group set member */
#define MAXHOSTNAMELEN 256 /* max hostname size */
-#define SPECNAMELEN 63 /* max length of devicename */
+#define SPECNAMELEN 255 /* max length of devicename */
/* More types and definitions used throughout the kernel. */
#ifdef _KERNEL

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 11, 8:53 PM (5 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29550761
Default Alt Text
D18932.diff (6 KB)

Event Timeline