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>