]> git.proxmox.com Git - mirror_zfs.git/commitdiff
FreeBSD: Fix the build on FreeBSD 12
authorAlan Somers <asomers@gmail.com>
Mon, 27 Nov 2023 20:58:03 +0000 (13:58 -0700)
committerTony Hutter <hutter2@llnl.gov>
Tue, 28 Nov 2023 23:19:07 +0000 (15:19 -0800)
It was broken for several reasons:
* VOP_UNLOCK lost an argument in 13.0.  So OpenZFS should be using
  VOP_UNLOCK1, but a few direct calls to VOP_UNLOCK snuck in.
* The location of the zlib header moved in 13.0 and 12.1.  We can drop
  support for building on 12.0, which is EoL.
* knlist_init lost an argument in 13.0.  OpenZFS change 9d0887402ba
  assumed 13.0 or later.
* FreeBSD 13.0 added copy_file_range, and OpenZFS change 67a1b037915
  assumed 13.0 or later.

Sponsored-by: Axcient
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Alan Somers <asomers@gmail.com>
Closes #15551

README.md
include/os/freebsd/spl/sys/vnode.h
module/os/freebsd/spl/spl_zlib.c
module/os/freebsd/zfs/event_os.c
module/os/freebsd/zfs/zfs_vnops_os.c

index 331889560950af8690f8495ee0f60f80652f2278..af244c1fff147aaeb495f432906ecc270e1da626 100644 (file)
--- a/README.md
+++ b/README.md
@@ -32,4 +32,4 @@ For more details see the NOTICE, LICENSE and COPYRIGHT files; `UCRL-CODE-235197`
 
 # Supported Kernels
   * The `META` file contains the officially recognized supported Linux kernel versions.
-  * Supported FreeBSD versions are any supported branches and releases starting from 12.2-RELEASE.
+  * Supported FreeBSD versions are any supported branches and releases starting from 12.4-RELEASE.
index 0779e58e49538b05b902ad70c64f53a78d571f3c..75c32f221ffd677aadef43e5c6beba1160455905 100644 (file)
@@ -56,6 +56,7 @@ enum symfollow { NO_FOLLOW = NOFOLLOW };
 #ifndef IN_BASE
 #include_next <sys/vnode.h>
 #endif
+#include <sys/ccompat.h>
 #include <sys/mount.h>
 #include <sys/cred.h>
 #include <sys/fcntl.h>
@@ -104,7 +105,7 @@ vn_flush_cached_data(vnode_t *vp, boolean_t sync)
                zfs_vmobject_wlock(vp->v_object);
                vm_object_page_clean(vp->v_object, 0, 0, flags);
                zfs_vmobject_wunlock(vp->v_object);
-               VOP_UNLOCK(vp);
+               VOP_UNLOCK1(vp);
        }
 }
 #endif
index 8bd3bdedf268fdec8a6d0fd295b258fd7602d21e..42c6d7f9df6c3b319ac3a1f1d4a077ceeab486f0 100644 (file)
@@ -32,11 +32,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/kmem.h>
 #include <sys/kmem_cache.h>
 #include <sys/zmod.h>
-#if __FreeBSD_version >= 1300041
 #include <contrib/zlib/zlib.h>
-#else
-#include <sys/zlib.h>
-#endif
 #include <sys/kobj.h>
 
 
@@ -90,11 +86,7 @@ zlib_inflateInit(z_stream *stream)
 static int
 zlib_inflate(z_stream *stream, int finish)
 {
-#if __FreeBSD_version >= 1300024
        return (inflate(stream, finish));
-#else
-       return (_zlib104_inflate(stream, finish));
-#endif
 }
 
 
index 239d44d0cfe7771bd9f108f26048ec9c1ea1d8d1..e774fbaaf86733c1bd0956e049607e792e356f6c 100644 (file)
@@ -46,6 +46,7 @@ knlist_sx_xunlock(void *arg)
        sx_xunlock((struct sx *)arg);
 }
 
+#if __FreeBSD_version >= 1300128
 static void
 knlist_sx_assert_lock(void *arg, int what)
 {
@@ -55,11 +56,28 @@ knlist_sx_assert_lock(void *arg, int what)
        else
                sx_assert((struct sx *)arg, SX_UNLOCKED);
 }
+#else
+static void
+knlist_sx_assert_locked(void *arg)
+{
+       sx_assert((struct sx *)arg, SX_LOCKED);
+}
+static void
+knlist_sx_assert_unlocked(void *arg)
+{
+       sx_assert((struct sx *)arg, SX_UNLOCKED);
+}
+#endif
 
 void
 knlist_init_sx(struct knlist *knl, struct sx *lock)
 {
 
+#if __FreeBSD_version >= 1300128
        knlist_init(knl, lock, knlist_sx_xlock, knlist_sx_xunlock,
            knlist_sx_assert_lock);
+#else
+       knlist_init(knl, lock, knlist_sx_xlock, knlist_sx_xunlock,
+           knlist_sx_assert_locked, knlist_sx_assert_unlocked);
+#endif
 }
index f672deed34ddef1784e0299b474b3883096fa714..05f28033be6af9e4ab9f755ced2fe168c635aee2 100644 (file)
@@ -6213,6 +6213,7 @@ zfs_deallocate(struct vop_deallocate_args *ap)
 }
 #endif
 
+#if __FreeBSD_version >= 1300039
 #ifndef _SYS_SYSPROTO_H_
 struct vop_copy_file_range_args {
        struct vnode *a_invp;
@@ -6319,6 +6320,7 @@ bad_write_fallback:
            ap->a_incred, ap->a_outcred, ap->a_fsizetd);
        return (error);
 }
+#endif
 
 struct vop_vector zfs_vnodeops;
 struct vop_vector zfs_fifoops;
@@ -6383,7 +6385,9 @@ struct vop_vector zfs_vnodeops = {
 #if __FreeBSD_version >= 1400043
        .vop_add_writecount =   vop_stdadd_writecount_nomsync,
 #endif
+#if __FreeBSD_version >= 1300039
        .vop_copy_file_range =  zfs_freebsd_copy_file_range,
+#endif
 };
 VFS_VOP_VECTOR_REGISTER(zfs_vnodeops);