diff options
Diffstat (limited to 'personal/zfs')
-rwxr-xr-x | personal/zfs/build | 35 | ||||
-rw-r--r-- | personal/zfs/checksums | 2 | ||||
-rw-r--r-- | personal/zfs/depends | 1 | ||||
-rw-r--r-- | personal/zfs/message | 6 | ||||
-rw-r--r-- | personal/zfs/patches/linux5.8.patch | 119 | ||||
-rwxr-xr-x | personal/zfs/post-install | 2 | ||||
-rw-r--r-- | personal/zfs/sources | 2 | ||||
-rw-r--r-- | personal/zfs/version | 1 |
8 files changed, 168 insertions, 0 deletions
diff --git a/personal/zfs/build b/personal/zfs/build new file mode 100755 index 0000000..c09016d --- /dev/null +++ b/personal/zfs/build @@ -0,0 +1,35 @@ +#!/bin/sh -e +# Build script originally taken from github.com/jedavies-dev/kiss-zfs +# Patched to work with the latest kernel, better directory management etc. + +patch -p1 < linux5.8.patch + +sed -i 's/CDDL/GPL/g' META + +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --disable-systemd \ + --disable-sysvinit \ + --disable-nls \ + --enable-linux-builtin \ + --with-linux="/usr/lib/modules/${KERNEL_VERSION:-$(uname -r)}/build" + +make +make DESTDIR="$1" install + +cd module +make +make DESTDIR="$1/usr" install + +# Holy hell zfs is insistent on not installing files where I want them to be +# installed. +mv "$1/lib/udev" "$1/usr/lib" +mv "$1/sbin/mount.zfs" "$1/usr/bin/mount.zfs" +rm -r "$1/sbin" "$1/lib" + +rm -rf "$1/usr/share/zfs/zfs-tests" \ + "$1/usr/lib/dracut" \ + "$1/usr/share/initramfs-tools" + diff --git a/personal/zfs/checksums b/personal/zfs/checksums new file mode 100644 index 0000000..24b95d4 --- /dev/null +++ b/personal/zfs/checksums @@ -0,0 +1,2 @@ +2b988f5777976f09d08083f6bebf6e67219c4c4c183c1f33033fb7e5e5eacafb zfs-0.8.4.tar.gz +fd453c8a97c1e55ff8a4dfb4f6aefafa891d959f27c2130b2b848d899c2ef8a9 linux5.8.patch diff --git a/personal/zfs/depends b/personal/zfs/depends new file mode 100644 index 0000000..4647d5c --- /dev/null +++ b/personal/zfs/depends @@ -0,0 +1 @@ +libtirpc diff --git a/personal/zfs/message b/personal/zfs/message new file mode 100644 index 0000000..193f7b3 --- /dev/null +++ b/personal/zfs/message @@ -0,0 +1,6 @@ +[1mIMPORTANT[m + + You will need to rebuild this package for everytime you upgrade the kernel. + You can specify a KERNEL_VERSION variable in order to build without the need + to reboot before building. + diff --git a/personal/zfs/patches/linux5.8.patch b/personal/zfs/patches/linux5.8.patch new file mode 100644 index 0000000..a05cd4f --- /dev/null +++ b/personal/zfs/patches/linux5.8.patch @@ -0,0 +1,119 @@ +diff -ur a/config/kernel.m4 b/config/kernel.m4 +--- a/config/kernel.m4 2020-05-05 12:56:29.709370875 -0400 ++++ b/config/kernel.m4 2020-08-12 10:38:58.842672016 -0400 +@@ -45,6 +45,7 @@ + ZFS_AC_KERNEL_SRC_SCHED + ZFS_AC_KERNEL_SRC_USLEEP_RANGE + ZFS_AC_KERNEL_SRC_KMEM_CACHE ++ ZFS_AC_KERNEL_SRC_VMALLOC_PAGE_KERNEL + ZFS_AC_KERNEL_SRC_WAIT + ZFS_AC_KERNEL_SRC_INODE_TIMES + ZFS_AC_KERNEL_SRC_INODE_LOCK +@@ -163,6 +164,7 @@ + ZFS_AC_KERNEL_SCHED + ZFS_AC_KERNEL_USLEEP_RANGE + ZFS_AC_KERNEL_KMEM_CACHE ++ ZFS_AC_KERNEL_VMALLOC_PAGE_KERNEL + ZFS_AC_KERNEL_WAIT + ZFS_AC_KERNEL_INODE_TIMES + ZFS_AC_KERNEL_INODE_LOCK +@@ -894,3 +896,28 @@ + [test -f build/conftest/conftest.ko], + [$3], [$4], [$5]) + ]) ++ ++dnl # ++dnl # 5.8 API, ++dnl # __vmalloc PAGE_KERNEL removal ++dnl # ++AC_DEFUN([ZFS_AC_KERNEL_SRC_VMALLOC_PAGE_KERNEL], [ ++ ZFS_LINUX_TEST_SRC([__vmalloc], [ ++ #include <linux/mm.h> ++ #include <linux/vmalloc.h> ++ ],[ ++ void *p __attribute__ ((unused)); ++ ++ p = __vmalloc(0, GFP_KERNEL, PAGE_KERNEL); ++ ]) ++]) ++ ++AC_DEFUN([ZFS_AC_KERNEL_VMALLOC_PAGE_KERNEL], [ ++ AC_MSG_CHECKING([whether __vmalloc(ptr, flags, pageflags) is available]) ++ ZFS_LINUX_TEST_RESULT([__vmalloc], [ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_VMALLOC_PAGE_KERNEL, 1, [__vmalloc page flags exists]) ++ ],[ ++ AC_MSG_RESULT(no) ++ ]) ++]) +diff -ur a/include/spl/sys/kmem.h b/include/spl/sys/kmem.h +--- a/include/spl/sys/kmem.h 2020-05-05 12:56:29.717370676 -0400 ++++ b/include/spl/sys/kmem.h 2020-08-12 10:41:20.253453058 -0400 +@@ -170,6 +170,15 @@ + extern void spl_kmem_free(const void *ptr, size_t sz); + + /* ++ * 5.8 API change, pgprot_t argument removed. ++ */ ++#ifdef HAVE_VMALLOC_PAGE_KERNEL ++#define spl_vmalloc(size, flags) __vmalloc(size, flags, PAGE_KERNEL) ++#else ++#define spl_vmalloc(size, flags) __vmalloc(size, flags) ++#endif ++ ++/* + * The following functions are only available for internal use. + */ + extern void *spl_kmem_alloc_impl(size_t size, int flags, int node); +diff -ur a/module/spl/spl-kmem-cache.c b/module/spl/spl-kmem-cache.c +--- a/module/spl/spl-kmem-cache.c 2020-05-05 12:57:28.442960922 -0400 ++++ b/module/spl/spl-kmem-cache.c 2020-08-12 10:38:58.843672014 -0400 +@@ -203,7 +203,7 @@ + ASSERT(ISP2(size)); + ptr = (void *)__get_free_pages(lflags, get_order(size)); + } else { +- ptr = __vmalloc(size, lflags | __GFP_HIGHMEM, PAGE_KERNEL); ++ ptr = spl_vmalloc(size, lflags | __GFP_HIGHMEM); + } + + /* Resulting allocated memory will be page aligned */ +@@ -1242,7 +1242,7 @@ + * allocation. + * + * However, this can't be applied to KVM_VMEM due to a bug that +- * __vmalloc() doesn't honor gfp flags in page table allocation. ++ * spl_vmalloc() doesn't honor gfp flags in page table allocation. + */ + if (!(skc->skc_flags & KMC_VMEM)) { + rc = __spl_cache_grow(skc, flags | KM_NOSLEEP); +diff -ur a/module/spl/spl-kmem.c b/module/spl/spl-kmem.c +--- a/module/spl/spl-kmem.c 2020-05-05 12:57:28.442960922 -0400 ++++ b/module/spl/spl-kmem.c 2020-08-12 10:38:58.843672014 -0400 +@@ -172,7 +172,7 @@ + * kmem_zalloc() callers. + * + * For vmem_alloc() and vmem_zalloc() callers it is permissible +- * to use __vmalloc(). However, in general use of __vmalloc() ++ * to use spl_vmalloc(). However, in general use of spl_vmalloc() + * is strongly discouraged because a global lock must be + * acquired. Contention on this lock can significantly + * impact performance so frequently manipulating the virtual +@@ -180,8 +180,7 @@ + */ + if ((size > spl_kmem_alloc_max) || use_vmem) { + if (flags & KM_VMEM) { +- ptr = __vmalloc(size, lflags | __GFP_HIGHMEM, +- PAGE_KERNEL); ++ ptr = spl_vmalloc(size, lflags | __GFP_HIGHMEM); + } else { + return (NULL); + } +@@ -194,7 +193,7 @@ + + /* + * For vmem_alloc() and vmem_zalloc() callers retry immediately +- * using __vmalloc() which is unlikely to fail. ++ * using spl_vmalloc() which is unlikely to fail. + */ + if ((flags & KM_VMEM) && (use_vmem == 0)) { + use_vmem = 1; diff --git a/personal/zfs/post-install b/personal/zfs/post-install new file mode 100755 index 0000000..5173fca --- /dev/null +++ b/personal/zfs/post-install @@ -0,0 +1,2 @@ +#!/bin/sh +depmod -b "/usr/lib/modules/${KERNEL_VERSION:-$(uname -r)}" diff --git a/personal/zfs/sources b/personal/zfs/sources new file mode 100644 index 0000000..ceedffc --- /dev/null +++ b/personal/zfs/sources @@ -0,0 +1,2 @@ +https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.4/zfs-0.8.4.tar.gz +patches/linux5.8.patch diff --git a/personal/zfs/version b/personal/zfs/version new file mode 100644 index 0000000..e8412c2 --- /dev/null +++ b/personal/zfs/version @@ -0,0 +1 @@ +0.8.4 1 |