Module Name:    src
Committed By:   riastradh
Date:           Thu Apr  9 19:47:05 UTC 2015

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c
        src/external/cddl/osnet/dist/uts/common/fs/zfs/sys: zfs_znode.h
        src/tests/fs/vfs: t_vnops.c

Log Message:
Advisory locking for zfs.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
cvs rdiff -u -r1.6 -r1.7 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h
cvs rdiff -u -r1.48 -r1.49 src/tests/fs/vfs/t_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.19 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.20
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.19	Thu Apr  9 19:35:55 2015
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Thu Apr  9 19:47:05 2015
@@ -5674,6 +5674,36 @@ zfs_netbsd_pathconf(void *v)
 #define	zfs_netbsd_unlock	genfs_unlock
 #define	zfs_netbsd_islocked	genfs_islocked
 
+static int
+zfs_netbsd_advlock(void *v)
+{
+	struct vop_advlock_args /* {
+		struct vnode *a_vp;
+		void *a_id;
+		int a_op;
+		struct flock *a_fl;
+		int a_flags;
+	} */ *ap = v;
+	struct vnode *vp;
+	struct znode *zp;
+	struct zfsvfs *zfsvfs;
+	int error;
+
+	vp = ap->a_vp;
+	KASSERT(vp != NULL);
+	zp = VTOZ(vp);
+	KASSERT(zp != NULL);
+	zfsvfs = zp->z_zfsvfs;
+	KASSERT(zfsvfs != NULL);
+
+	ZFS_ENTER(zfsvfs);
+	ZFS_VERIFY_ZP(zp);
+	error = lf_advlock(ap, &zp->z_lockf, zp->z_phys->zp_size);
+	ZFS_EXIT(zfsvfs);
+
+	return error;
+}
+
 /*
 int
 zfs_netbsd_getpages(void *v)
@@ -5753,8 +5783,8 @@ const struct vnodeopv_entry_desc zfs_vno
 	{ &vop_putpages_desc,		zfs_netbsd_putpages },
 	{ &vop_mmap_desc,		zfs_netbsd_mmap },
 	{ &vop_islocked_desc,		zfs_netbsd_islocked },
-#ifdef notyet
 	{ &vop_advlock_desc,		zfs_netbsd_advlock },
+#ifdef notyet
 	{ &vop_fcntl_desc,		zfs_netbsd_fcntl },
 	{ &vop_bmap_desc,		zfs_netbsd_bmap },
 	{ &vop_strategy_desc,		zfs_netbsd_strategy },		

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h:1.6 src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h:1.7
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h:1.6	Fri Dec  5 09:13:32 2014
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h	Thu Apr  9 19:47:05 2015
@@ -222,6 +222,10 @@ typedef struct znode {
 	 */
 	znode_phys_t	*z_phys;	/* pointer to persistent znode */
 	dmu_buf_t	*z_dbuf;	/* buffer containing the z_phys */
+	/*
+	 * NetBSD-specific fields.
+	 */
+	struct lockf	*z_lockf;	/* Head of byte-level lock list. */
 } znode_t;
 
 

Index: src/tests/fs/vfs/t_vnops.c
diff -u src/tests/fs/vfs/t_vnops.c:1.48 src/tests/fs/vfs/t_vnops.c:1.49
--- src/tests/fs/vfs/t_vnops.c:1.48	Thu Apr  9 05:32:53 2015
+++ src/tests/fs/vfs/t_vnops.c	Thu Apr  9 19:47:05 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_vnops.c,v 1.48 2015/04/09 05:32:53 riastradh Exp $	*/
+/*	$NetBSD: t_vnops.c,v 1.49 2015/04/09 19:47:05 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -678,9 +678,6 @@ fcntl_lock(const atf_tc_t *tc, const cha
 	RL(fd = rump_sys_open(TESTFILE, O_RDWR | O_CREAT, 0755));
 	RL(rump_sys_ftruncate(fd, 8192));
 
-	/* PR kern/43321 */
-	if (FSTYPE_ZFS(tc))
-		atf_tc_expect_fail("PR kern/47656: Test known to be broken");
 	RL(rump_sys_fcntl(fd, F_SETLK, &l));
 
 	/* Next, we fork and try to lock the same area */
@@ -814,9 +811,6 @@ fcntl_getlock_pids(const atf_tc_t *tc, c
 
 		RL(rump_sys_ftruncate(fd[i], sz));
 
-		if (FSTYPE_ZFS(tc))
-			atf_tc_expect_fail("PR kern/47656: Test known to be "
-			    "broken");
 		if (i < __arraycount(lock)) {
 			RL(rump_sys_fcntl(fd[i], F_SETLK, &lock[i]));
 			expect[i].l_pid = pid[i];

Reply via email to