PERFORCE change 64433 for review

Robert Watson rwatson at FreeBSD.org
Sat Nov 6 09:25:24 PST 2004


http://perforce.freebsd.org/chv.cgi?CH=64433

Change 64433 by rwatson at rwatson_zoo on 2004/11/06 17:25:09

	Integ md(4) tweaks to netperf_socket.

Affected files ...

.. //depot/projects/netperf_socket/sys/dev/md/md.c#24 integrate
.. //depot/projects/netperf_socket/sys/sys/mdioctl.h#6 integrate

Differences ...

==== //depot/projects/netperf_socket/sys/dev/md/md.c#24 (text+ko) ====

@@ -6,7 +6,7 @@
  * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
  * ----------------------------------------------------------------------------
  *
- * $FreeBSD: src/sys/dev/md/md.c,v 1.142 2004/10/23 20:50:06 phk Exp $
+ * $FreeBSD: src/sys/dev/md/md.c,v 1.144 2004/11/06 13:16:35 pjd Exp $
  *
  */
 
@@ -174,6 +174,7 @@
 
 	/* MD_VNODE related fields */
 	struct vnode *vnode;
+	char file[PATH_MAX];
 	struct ucred *cred;
 
 	/* MD_SWAP related fields */
@@ -440,7 +441,7 @@
 		}
 		if (osp > 255)
 			uma_zfree(sc->uma, (void*)osp);
-		if (error)
+		if (error != 0)
 			break;
 		secno++;
 		dst += sc->sectorsize;
@@ -721,7 +722,7 @@
 	mtx_init(&sc->queue_mtx, "md bio queue", NULL, MTX_DEF);
 	sprintf(sc->name, "md%d", unit);
 	error = kthread_create(md_kthread, sc, &sc->procp, 0, 0,"%s", sc->name);
-	if (error) {
+	if (error != 0) {
 		free(sc, M_MD);
 		return (NULL);
 	}
@@ -861,19 +862,23 @@
 	struct nameidata nd;
 	int error, flags;
 
+	if (strlcpy(sc->file, mdio->md_file, sizeof(sc->file)) >=
+	    sizeof(sc->file)) {
+		return (ENAMETOOLONG);
+	}
 	flags = FREAD|FWRITE;
-	NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, mdio->md_file, td);
+	NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, sc->file, td);
 	error = vn_open(&nd, &flags, 0, -1);
-	if (error) {
+	if (error != 0) {
 		NDFREE(&nd, NDF_ONLY_PNBUF);
 		if (error != EACCES && error != EPERM && error != EROFS)
 			return (error);
 		flags &= ~FWRITE;
-		NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, mdio->md_file, td);
+		NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, sc->file, td);
 		error = vn_open(&nd, &flags, 0, -1);
 	}
 	NDFREE(&nd, NDF_ONLY_PNBUF);
-	if (error)
+	if (error != 0)
 		return (error);
 	if (nd.ni_vp->v_type != VREG ||
 	    (error = VOP_GETATTR(nd.ni_vp, &vattr, td->td_ucred, td))) {
@@ -984,7 +989,7 @@
 		}
 	}
 	error = mdsetcred(sc, td->td_ucred);
-	if (error) {
+	if (error != 0) {
 		vm_object_deallocate(sc->object);
 		sc->object = NULL;
 	}
@@ -1097,11 +1102,15 @@
 		mdio->md_mediasize = sc->mediasize;
 		mdio->md_sectorsize = sc->sectorsize;
 		if (sc->type == MD_VNODE) {
-			/* XXX fill this in */
-			mdio->md_file = NULL;
+			if (strlcpy(mdio->md_file, sc->file,
+			    sizeof(mdio->md_file)) >= sizeof(mdio->md_file)) {
+				return (ENAMETOOLONG);
+			}
 		}
 		return (0);
 	case MDIOCLIST:
+		if (mdio->md_version != MDIOVERSION)
+			return (EINVAL);
 		i = 1;
 		LIST_FOREACH(sc, &md_softc_list, list) {
 			if (i == MDNPAD - 1)

==== //depot/projects/netperf_socket/sys/sys/mdioctl.h#6 (text+ko) ====

@@ -37,7 +37,7 @@
  *
  * From: src/sys/sys/vnioctl.h,v 1.4
  *
- * $FreeBSD: src/sys/sys/mdioctl.h,v 1.17 2004/09/16 21:32:13 pjd Exp $
+ * $FreeBSD: src/sys/sys/mdioctl.h,v 1.18 2004/11/06 13:07:02 pjd Exp $
  */
 
 #ifndef _SYS_MDIOCTL_H_
@@ -54,20 +54,20 @@
 	unsigned	md_version;	/* Structure layout version */
 	unsigned	md_unit;	/* unit number */
 	enum md_types	md_type ;	/* type of disk */
-	char		*md_file;	/* pathname of file to mount */
 	off_t		md_mediasize;	/* size of disk in bytes */
 	unsigned	md_sectorsize;	/* sectorsize */
 	unsigned	md_options;	/* options */
 	u_int64_t	md_base;	/* base address */
 	int		md_fwheads;	/* firmware heads */
 	int		md_fwsectors;	/* firmware sectors */
+	char		md_file[PATH_MAX]; /* pathname of file to mount */
 	int		md_pad[MDNPAD];	/* padding for future ideas */
 };
 
 #define MD_NAME		"md"
 #define MD_MODNAME	"g_md"
 #define MDCTL_NAME	"mdctl"
-#define MDIOVERSION	0
+#define MDIOVERSION	1
 
 /*
  * Before you can use a unit, it must be configured with MDIOCSET.


More information about the p4-projects mailing list