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
# 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.
#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>
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
#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>
static int
zlib_inflate(z_stream *stream, int finish)
{
-#if __FreeBSD_version >= 1300024
return (inflate(stream, finish));
-#else
- return (_zlib104_inflate(stream, finish));
-#endif
}
sx_xunlock((struct sx *)arg);
}
+#if __FreeBSD_version >= 1300128
static void
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
}
}
#endif
+#if __FreeBSD_version >= 1300039
#ifndef _SYS_SYSPROTO_H_
struct vop_copy_file_range_args {
struct vnode *a_invp;
ap->a_incred, ap->a_outcred, ap->a_fsizetd);
return (error);
}
+#endif
struct vop_vector zfs_vnodeops;
struct vop_vector zfs_fifoops;
#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);