PERFORCE change 142351 for review
John Birrell
jb at FreeBSD.org
Tue May 27 03:38:20 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=142351
Change 142351 by jb at 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
}
More information about the p4-projects
mailing list