Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 May 2008 03:38:19 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 142351 for review
Message-ID:  <200805270338.m4R3cJWK029732@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=142351

Change 142351 by jb@freebsd3 on 2008/05/27 03:38:13

	Go back to releng7 compatible stuff.

Affected files ...

.. //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c#3 edit
.. //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c#3 edit
.. //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/rpc/xdr.h#5 edit
.. //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/sys/proc.h#3 edit
.. //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/sys/vnode.h#3 edit
.. //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c#3 edit
.. //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h#3 edit
.. //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#4 edit
.. //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#3 edit
.. //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/sys/procset.h#3 edit

Differences ...

==== //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c#3 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c,v 1.7 2008/03/28 22:16:05 jb Exp $");
+__FBSDID("$FreeBSD: src/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c,v 1.7.2.1 2008/04/17 01:23:29 jb Exp $");
 
 #include <sys/types.h>
 #include <sys/systm.h>
@@ -77,12 +77,12 @@
 
 	flags = FREAD;
 	NDINIT(&nd, LOOKUP, NOFOLLOW, UIO_SYSSPACE, file, td);
-	error = vn_open_cred(&nd, &flags, 0, curthread->td_ucred, NULL);
+	error = vn_open_cred(&nd, &flags, 0, td->td_ucred, NULL);
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 	if (error != 0)
 		return (NULL);
 	/* We just unlock so we hold a reference. */
-	VOP_UNLOCK(nd.ni_vp, 0);
+	VOP_UNLOCK(nd.ni_vp, 0, td);
 	return (nd.ni_vp);
 }
 
@@ -123,9 +123,9 @@
 	struct vattr va;
 	int error;
 
-	vn_lock(vp, LK_SHARED | LK_RETRY);
+	vn_lock(vp, LK_SHARED | LK_RETRY, td);
 	error = VOP_GETATTR(vp, &va, td->td_ucred, td);
-	VOP_UNLOCK(vp, 0);
+	VOP_UNLOCK(vp, 0, td);
 	if (error == 0)
 		*size = (uint64_t)va.va_size;
 	return (error);
@@ -176,9 +176,9 @@
 	auio.uio_resid = size;
 	auio.uio_td = td;
 
-	vn_lock(vp, LK_SHARED | LK_RETRY);
+	vn_lock(vp, LK_SHARED | LK_RETRY, td);
 	error = VOP_READ(vp, &auio, IO_UNIT | IO_SYNC, td->td_ucred);
-	VOP_UNLOCK(vp, 0);
+	VOP_UNLOCK(vp, 0, td);
 	return (error != 0 ? -1 : size - auio.uio_resid);
 }
 

==== //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c#3 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c,v 1.10 2008/03/28 22:16:05 jb Exp $");
+__FBSDID("$FreeBSD: src/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c,v 1.10.2.1 2008/04/17 01:23:29 jb Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -163,7 +163,6 @@
 {
 	struct mount *mp;
 	struct vfsconf *vfsp;
-	struct ucred *newcr, *oldcr;
 	int error;
 
 	/*
@@ -192,9 +191,9 @@
 	/*
 	 * Allocate and initialize the filesystem.
 	 */
-	vn_lock(vp, LK_SHARED | LK_RETRY);
+	vn_lock(vp, LK_SHARED | LK_RETRY, td);
 	mp = vfs_mount_alloc(vp, vfsp, fspath, td);
-	VOP_UNLOCK(vp, 0);
+	VOP_UNLOCK(vp, 0, td);
 
 	mp->mnt_optnew = NULL;
 	vfs_setmntopt(mp, "from", fspec, 0);
@@ -203,9 +202,7 @@
 
 	/*
 	 * Set the mount level flags.
-	 * crdup() can sleep, so do it before acquiring a mutex.
 	 */
-	newcr = crdup(kcred);
 	MNT_ILOCK(mp);
 	if (fsflags & MNT_RDONLY)
 		mp->mnt_flag |= MNT_RDONLY;
@@ -215,11 +212,10 @@
 	 * Unprivileged user can trigger mounting a snapshot, but we don't want
 	 * him to unmount it, so we switch to privileged credentials.
 	 */
-	oldcr = mp->mnt_cred;
-	mp->mnt_cred = newcr;
+	crfree(mp->mnt_cred);
+	mp->mnt_cred = crdup(kcred);
 	mp->mnt_stat.f_owner = mp->mnt_cred->cr_uid;
 	MNT_IUNLOCK(mp);
-	crfree(oldcr);
 	/*
 	 * Mount the filesystem.
 	 * XXX The final recipients of VFS_MOUNT just overwrite the ndp they
@@ -238,7 +234,7 @@
 	 * mnt_optnew.
 	*/
 	mp->mnt_optnew = NULL;
-	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
 	/*
 	 * Put the new filesystem on the mount list after root.
 	 */
@@ -260,7 +256,7 @@
 			panic("mount: lost mount");
 		mountcheckdirs(vp, mvp);
 		vput(mvp);
-		VOP_UNLOCK(vp, 0);
+		VOP_UNLOCK(vp, 0, td);
 		if ((mp->mnt_flag & MNT_RDONLY) == 0)
 			error = vfs_allocate_syncvnode(mp);
 		vfs_unbusy(mp, td);
@@ -272,7 +268,7 @@
 		VI_LOCK(vp);
 		vp->v_iflag &= ~VI_MOUNT;
 		VI_UNLOCK(vp);
-		VOP_UNLOCK(vp, 0);
+		VOP_UNLOCK(vp, 0, td);
 		vfs_unbusy(mp, td);
 		vfs_mount_destroy(mp);
 	}

==== //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/rpc/xdr.h#5 (text+ko) ====

@@ -19,7 +19,7 @@
  *
  * CDDL HEADER END
  *
- * $FreeBSD: src/sys/cddl/compat/opensolaris/rpc/xdr.h,v 1.4 2008/04/22 07:42:59 jb Exp $
+ * $FreeBSD: src/sys/cddl/compat/opensolaris/rpc/xdr.h,v 1.3.2.2 2008/04/22 09:21:29 jb Exp $
  */
 /*
  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
@@ -52,6 +52,19 @@
 #define xdr_control(a,b,c) xdrmem_control(a,b,c)
 
 /*
+ * These are XDR control operators
+ */
+
+#define	XDR_GET_BYTES_AVAIL 1
+
+struct xdr_bytesrec {
+	bool_t xc_is_last_record;
+	size_t xc_num_avail;
+};
+
+typedef struct xdr_bytesrec xdr_bytesrec;
+
+/*
  * These are the request arguments to XDR_CONTROL.
  *
  * XDR_PEEK - returns the contents of the next XDR unit on the XDR stream.

==== //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/sys/proc.h#3 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/cddl/compat/opensolaris/sys/proc.h,v 1.5 2008/03/28 22:16:06 jb Exp $
+ * $FreeBSD: src/sys/cddl/compat/opensolaris/sys/proc.h,v 1.5.2.1 2008/04/17 01:23:30 jb Exp $
  */
 
 #ifndef _OPENSOLARIS_SYS_PROC_H_
@@ -75,12 +75,12 @@
 	ASSERT(len == 0);
 	ASSERT(state == TS_RUN);
 
-	error = kproc_create(proc, arg, &p, 0, ZFS_KSTACK_PAGES,
+	error = kthread_create(proc, arg, &p, 0, ZFS_KSTACK_PAGES,
 	    "solthread %p", proc);
 	return (error == 0 ? FIRST_THREAD_IN_PROC(p) : NULL);
 }
 
-#define	thread_exit()	kproc_exit(0)
+#define	thread_exit()	kthread_exit(0)
 
 #endif	/* _KERNEL */
 

==== //depot/projects/dtrace7/src/sys/cddl/compat/opensolaris/sys/vnode.h#3 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/cddl/compat/opensolaris/sys/vnode.h,v 1.6 2008/03/28 22:16:06 jb Exp $
+ * $FreeBSD: src/sys/cddl/compat/opensolaris/sys/vnode.h,v 1.6.2.1 2008/04/17 01:23:30 jb Exp $
  */
 
 #ifndef _OPENSOLARIS_SYS_VNODE_H_
@@ -175,7 +175,7 @@
 	if (error == 0) {
 		/* We just unlock so we hold a reference. */
 		VN_HOLD(nd.ni_vp);
-		VOP_UNLOCK(nd.ni_vp, 0);
+		VOP_UNLOCK(nd.ni_vp, 0, td);
 		*vpp = nd.ni_vp;
 	}
 	return (error);
@@ -213,6 +213,7 @@
 static __inline int
 zfs_vop_fsync(vnode_t *vp, int flag, cred_t *cr)
 {
+	struct thread *td = curthread;
 	struct mount *mp;
 	int error, vfslocked;
 
@@ -221,9 +222,9 @@
 	vfslocked = VFS_LOCK_GIANT(vp->v_mount);
 	if ((error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0)
 		goto drop;
-	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
-	error = VOP_FSYNC(vp, MNT_WAIT, curthread);
-	VOP_UNLOCK(vp, 0);
+	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+	error = VOP_FSYNC(vp, MNT_WAIT, td);
+	VOP_UNLOCK(vp, 0, td);
 	vn_finished_write(mp);
 drop:
 	VFS_UNLOCK_GIANT(vfslocked);

==== //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c#3 (text) ====

@@ -5593,7 +5593,7 @@
 #if defined(sun)
 	debug_enter(c);
 #else
-	kdb_enter(KDB_WHY_DTRACE, "breakpoint action");
+	kdb_enter_why(KDB_WHY_DTRACE, "breakpoint action");
 #endif
 }
 
@@ -11410,9 +11410,11 @@
 	 * block pending our completion.
 	 */
 	for (enab = dtrace_retained; enab != NULL; enab = enab->dten_next) {
+#if defined(sun)
 		cred_t *cr = enab->dten_vstate->dtvs_state->dts_cred.dcr_cred;
 
 		if (INGLOBALZONE(curproc) || getzoneid() == crgetzoneid(cr))
+#endif
 			(void) dtrace_enabling_match(enab, NULL);
 	}
 

==== //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h#3 (text+ko) ====

@@ -162,6 +162,7 @@
 	uint32_t	z_sync_cnt;	/* synchronous open count */
 	kmutex_t	z_acl_lock;	/* acl data lock */
 	list_node_t	z_link_node;	/* all znodes in fs link */
+	struct lockf	*z_lockf;	/* Head of byte-level lock list. */
 	/*
 	 * These are dmu managed fields.
 	 */

==== //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#4 (text+ko) ====

@@ -1117,12 +1117,12 @@
 		int ltype = 0;
 
 		if (cnp->cn_flags & ISDOTDOT) {
-			ltype = VOP_ISLOCKED(dvp);
-			VOP_UNLOCK(dvp, 0);
+			ltype = VOP_ISLOCKED(dvp, td);
+			VOP_UNLOCK(dvp, 0, td);
 		}
-		error = vn_lock(*vpp, cnp->cn_lkflags);
+		error = vn_lock(*vpp, cnp->cn_lkflags, td);
 		if (cnp->cn_flags & ISDOTDOT)
-			vn_lock(dvp, ltype | LK_RETRY);
+			vn_lock(dvp, ltype | LK_RETRY, td);
 		if (error != 0) {
 			VN_RELE(*vpp);
 			*vpp = NULL;
@@ -1175,7 +1175,7 @@
 /* ARGSUSED */
 static int
 zfs_create(vnode_t *dvp, char *name, vattr_t *vap, int excl, int mode,
-    vnode_t **vpp, cred_t *cr)
+    vnode_t **vpp, cred_t *cr, kthread_t *td)
 {
 	znode_t		*zp, *dzp = VTOZ(dvp);
 	zfsvfs_t	*zfsvfs = dzp->z_zfsvfs;
@@ -1306,7 +1306,7 @@
 
 	if (error == 0) {
 		*vpp = ZTOV(zp);
-		vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY);
+		vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY, td);
 	}
 
 	if (dl)
@@ -1588,7 +1588,7 @@
 	zfs_log_create(zilog, tx, TX_MKDIR, dzp, zp, dirname);
 	dmu_tx_commit(tx);
 
-	vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY);
+	vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY, curthread);
 
 	zfs_dirent_unlock(dl);
 
@@ -2773,7 +2773,7 @@
 	if (error == 0) {
 		zfs_log_symlink(zilog, tx, TX_SYMLINK, dzp, zp, name, link);
 		*vpp = ZTOV(zp);
-		vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY);
+		vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY, td);
 	}
 
 	dmu_tx_commit(tx);
@@ -3249,7 +3249,7 @@
 	mode = vap->va_mode & ALLPERMS;
 
 	return (zfs_create(ap->a_dvp, cnp->cn_nameptr, vap, !EXCL, mode,
-	    ap->a_vpp, cnp->cn_cred));
+	    ap->a_vpp, cnp->cn_cred, cnp->cn_thread));
 }
 
 static int
@@ -3533,6 +3533,43 @@
 	return (error);
 }
 
+/*
+ * Advisory record locking support
+ */
+static int
+zfs_freebsd_advlock(ap)
+	struct vop_advlock_args /* {
+		struct vnode *a_vp;
+		caddr_t  a_id;
+		int  a_op;
+		struct flock *a_fl;
+		int  a_flags;
+	} */ *ap;
+{
+	znode_t	*zp = VTOZ(ap->a_vp);
+
+	return (lf_advlock(ap, &(zp->z_lockf), zp->z_phys->zp_size));
+}
+
+/*
+ * Advisory record locking support
+ */
+static int
+zfs_freebsd_advlockasync(ap)
+	struct vop_advlockasync_args /* {
+		struct vnode *a_vp;
+		caddr_t  a_id;
+		int  a_op;
+		struct flock *a_fl;
+		int  a_flags;
+		struct task *a_task;
+	} */ *ap;
+{
+	znode_t	*zp = VTOZ(ap->a_vp);
+
+	return (lf_advlockasync(ap, &(zp->z_lockf), zp->z_phys->zp_size));
+}
+
 struct vop_vector zfs_vnodeops;
 struct vop_vector zfs_fifoops;
 
@@ -3565,6 +3602,8 @@
 	.vop_write =	zfs_freebsd_write,
 	.vop_remove =	zfs_freebsd_remove,
 	.vop_rename =	zfs_freebsd_rename,
+	.vop_advlock =	zfs_freebsd_advlock,
+	.vop_advlockasync = zfs_freebsd_advlockasync,
 	.vop_pathconf =	zfs_freebsd_pathconf,
 	.vop_bmap =	VOP_EOPNOTSUPP,
 	.vop_fid =	zfs_freebsd_fid,

==== //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#3 (text+ko) ====

@@ -57,10 +57,6 @@
 #include <sys/zfs_znode.h>
 #include <sys/refcount.h>
 
-/* Used by fstat(1). */
-SYSCTL_INT(_debug_sizeof, OID_AUTO, znode, CTLFLAG_RD, 0, sizeof(znode_t),
-    "sizeof(znode_t)");
-
 /*
  * Functions needed for userland (ie: libzpool) are not put under
  * #ifdef_KERNEL; the rest of the functions have dependencies
@@ -85,9 +81,9 @@
 		ZTOV(zp) = NULL;
 		vhold(vp);
 		mutex_exit(&zp->z_lock);
-		vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+		vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread);
 		vrecycle(vp, curthread);
-		VOP_UNLOCK(vp, 0);
+		VOP_UNLOCK(vp, 0, curthread);
 		vdrop(vp);
 		zfs_znode_free(zp);
 	} else {
@@ -119,8 +115,8 @@
 		ASSERT(error == 0);
 		zp->z_vnode = vp;
 		vp->v_data = (caddr_t)zp;
-		VN_LOCK_AREC(vp);
-		VN_LOCK_ASHARE(vp);
+		vp->v_vnlock->lk_flags |= LK_CANRECURSE;
+		vp->v_vnlock->lk_flags &= ~LK_NOSHARE;
 	} else {
 		zp->z_vnode = NULL;
 	}
@@ -136,6 +132,7 @@
 
 	zp->z_dbuf_held = 0;
 	zp->z_dirlocks = 0;
+	zp->z_lockf = NULL;
 	return (0);
 }
 
@@ -603,8 +600,8 @@
 			ASSERT(err == 0);
 			vp = ZTOV(zp);
 			vp->v_data = (caddr_t)zp;
-			VN_LOCK_AREC(vp);
-			VN_LOCK_ASHARE(vp);
+			vp->v_vnlock->lk_flags |= LK_CANRECURSE;
+			vp->v_vnlock->lk_flags &= ~LK_NOSHARE;
 			vp->v_type = IFTOVT((mode_t)zp->z_phys->zp_mode);
 			if (vp->v_type == VDIR)
 				zp->z_zn_prefetch = B_TRUE;	/* z_prefetch default is enabled */

==== //depot/projects/dtrace7/src/sys/cddl/contrib/opensolaris/uts/common/sys/procset.h#3 (text+ko) ====

@@ -139,6 +139,7 @@
 
 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
 
+#if defined(sun)
 #ifdef _KERNEL
 
 struct proc;
@@ -152,6 +153,7 @@
 extern id_t getmyid(idtype_t);
 
 #endif	/* _KERNEL */
+#endif
 
 #ifdef	__cplusplus
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200805270338.m4R3cJWK029732>