Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Advisory locking for zfs.



details:   https://anonhg.NetBSD.org/src/rev/831b2773cd60
branches:  trunk
changeset: 337285:831b2773cd60
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Thu Apr 09 19:47:05 2015 +0000

description:
Advisory locking for zfs.

diffstat:

 external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h |   4 +
 external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c     |  32 +++++++++++++-
 tests/fs/vfs/t_vnops.c                                     |   8 +---
 3 files changed, 36 insertions(+), 8 deletions(-)

diffs (93 lines):

diff -r 4ff34202658e -r 831b2773cd60 external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h
--- a/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h        Thu Apr 09 19:35:55 2015 +0000
+++ b/external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h        Thu Apr 09 19:47:05 2015 +0000
@@ -222,6 +222,10 @@
         */
        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;
 
 
diff -r 4ff34202658e -r 831b2773cd60 external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
--- a/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c    Thu Apr 09 19:35:55 2015 +0000
+++ b/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c    Thu Apr 09 19:47:05 2015 +0000
@@ -5674,6 +5674,36 @@
 #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 @@
        { &vop_putpages_desc,           zfs_netbsd_putpages },
        { &vop_mmap_desc,               zfs_netbsd_mmap },
        { &vop_islocked_desc,           zfs_netbsd_islocked },
+       { &vop_advlock_desc,            zfs_netbsd_advlock },
 #ifdef notyet
-       { &vop_advlock_desc,            zfs_netbsd_advlock },
        { &vop_fcntl_desc,              zfs_netbsd_fcntl },
        { &vop_bmap_desc,               zfs_netbsd_bmap },
        { &vop_strategy_desc,           zfs_netbsd_strategy },          
diff -r 4ff34202658e -r 831b2773cd60 tests/fs/vfs/t_vnops.c
--- a/tests/fs/vfs/t_vnops.c    Thu Apr 09 19:35:55 2015 +0000
+++ b/tests/fs/vfs/t_vnops.c    Thu Apr 09 19:47:05 2015 +0000
@@ -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 @@
        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 @@
 
                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];



Home | Main Index | Thread Index | Old Index