commit: 31475eb3e28e326553c89753874df3171cdf33ec Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> AuthorDate: Thu Jul 23 20:52:00 2020 +0000 Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> CommitDate: Thu Jul 23 22:56:47 2020 +0000 URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=31475eb3
bcache: Switch to UDEV usage Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> defaults/initrd.scripts | 24 ------ defaults/linuxrc | 10 --- defaults/software.sh | 7 ++ gen_cmdline.sh | 4 +- gen_initramfs.sh | 28 +++++++ genkernel | 1 - gkbuilds/bcache-tools.gkbuild | 27 +++++++ .../bcache-tools-1.0.8_p20141204-build.patch | 88 ++++++++++++++++++++++ .../bcache-tools-1.0.8_p20141204-crc64.patch | 53 +++++++++++++ .../bcache-tools-1.0.8_p20141204-modprobe.patch | 11 +++ 10 files changed, 216 insertions(+), 37 deletions(-) diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts index 5515f49..8e7d109 100644 --- a/defaults/initrd.scripts +++ b/defaults/initrd.scripts @@ -1635,30 +1635,6 @@ start_volumes() { fi fi - if [ "${USE_BCACHE}" = '1' ] - then - if [ ! -e /sys/fs/bcache/register_quiet ] - then - bad_msg "dobcache invoked but '/sys/fs/bcache/register_quiet' does not exist; Skipping bcache initialization ..." - else - good_msg "Registering all block devices in bcache ..." - - local i= - for i in $(awk '$4 !~ /^(name$|$)/ { print $4 }' /proc/partitions) - do - if [ -e "/dev/${i}" ] - then - # Push all the block devices to register_quiet - # If its bcache, it will bring it up, if not, it will simply ignore it. - log_msg "COMMAND: 'echo \"/dev/${i}\" >/sys/fs/bcache/register_quiet'" - echo "/dev/${i}" >/sys/fs/bcache/register_quiet 2>/dev/null - else - warn_msg "'/dev/${i}' should exist but is missing; Ignoring ..." - fi - done - fi - fi - if [ "${USE_BTRFS}" = '1' ] then if ! hash btrfs >/dev/null 2>&1 diff --git a/defaults/linuxrc b/defaults/linuxrc index 4c1b470..e9e97b6 100644 --- a/defaults/linuxrc +++ b/defaults/linuxrc @@ -147,9 +147,6 @@ do ;; esac ;; - dobcache) - USE_BCACHE=1 - ;; dobtrfs) USE_BTRFS=1 ;; @@ -526,13 +523,6 @@ then FIRSTMODS="${FIRSTMODS} crc32_generic" fi -if [ "${USE_BCACHE}" = '1' ] -then - # Force loading of bcache module in case module loading would - # be skipped because $REAL_ROOT is already present - FIRSTMODS="${FIRSTMODS} bcache" -fi - splash 'init' cmdline_hwopts diff --git a/defaults/software.sh b/defaults/software.sh index a4f15d6..ae7532f 100644 --- a/defaults/software.sh +++ b/defaults/software.sh @@ -9,6 +9,13 @@ # - This file should not override previously defined variables, as their values may # originate from user changes to /etc/genkernel.conf . +GKPKG_BCACHE_TOOLS_PN="bcache-tools" +GKPKG_BCACHE_TOOLS_PV="${GKPKG_BCACHE_TOOLS_PV:-VERSION_BCACHE_TOOLS}" +GKPKG_BCACHE_TOOLS_DEPS="util-linux eudev" +GKPKG_BCACHE_TOOLS_SRCTAR="${GKPKG_BCACHE_TOOLS_SRCTAR:-${DISTDIR}/bcache-tools-${GKPKG_BCACHE_TOOLS_PV}.tar.gz}" +GKPKG_BCACHE_TOOLS_SRCDIR="${GKPKG_BCACHE_TOOLS_SRCDIR:-bcache-tools-399021549984ad27bf4a13ae85e458833fe003d7}" +GKPKG_BCACHE_TOOLS_BINPKG="${GKPKG_BCACHE_TOOLS_BINPKG:-%%CACHE%%/bcache-tools-${GKPKG_BCACHE_TOOLS_PV}-%%ARCH%%.tar.xz}" + GKPKG_BOOST_PN="boost" GKPKG_BOOST_PV="${GKPKG_BOOST_PV:-VERSION_BOOST}" GKPKG_BOOST_DEPS="boost-build" diff --git a/gen_cmdline.sh b/gen_cmdline.sh index 5e667bd..f502350 100755 --- a/gen_cmdline.sh +++ b/gen_cmdline.sh @@ -35,8 +35,6 @@ longusage() { echo " --no-xconfig Don't run xconfig after oldconfig" echo " --save-config Save the configuration to /etc/kernels" echo " --no-save-config Don't save the configuration to /etc/kernels" - echo " --bcache Enable block layer cache (bcache) support in kernel" - echo " --no-bcache Don't enable block layer cache (bcache) support in kernel" echo " --hyperv Enable Microsoft Hyper-V kernel options in kernel" echo " --no-hyperv Don't enable Microsoft Hyper-V kernel options in kernel" echo " --microcode=(all|amd|intel)" @@ -117,6 +115,8 @@ longusage() { echo " --do-keymap-auto Forces keymap selection at boot" echo " --keymap Enables keymap selection support" echo " --no-keymap Disables keymap selection support" + echo " --bcache Include block layer cache (bcache) support" + echo " --no-bcache Exclude block layer cache (bcache) support" echo " --lvm Include LVM support" echo " --no-lvm Exclude LVM support" echo " --mdadm Include MDADM/MDMON support" diff --git a/gen_initramfs.sh b/gen_initramfs.sh index 0669f74..af0ff44 100755 --- a/gen_initramfs.sh +++ b/gen_initramfs.sh @@ -398,6 +398,7 @@ append_base_layout() { isTrue "${MICROCODE_INITRAMFS}" && build_parameters+=( --microcode-initramfs ) || build_parameters+=( --no-microcode-initramfs ) isTrue "${RAMDISKMODULES}" && build_parameters+=( --ramdisk-modules ) || build_parameters+=( --no-ramdisk-modules ) isTrue "${BUSYBOX}" && build_parameters+=( --busybox ) || build_parameters+=( --no-busybox ) + isTrue "${BCACHE}" && build_parameters+=( --bcache ) || build_parameters+=( --no-bcache ) isTrue "${B2SUM}" && build_parameters+=( --b2sum ) || build_parameters+=( --no-b2sum ) isTrue "${DISKLABEL}" && build_parameters+=( --disklabel ) || build_parameters+=( --no-disklabel ) isTrue "${BTRFS}" && build_parameters+=( --btrfs ) || build_parameters+=( --no-btrfs ) @@ -608,6 +609,32 @@ append_b2sum() { fi } +append_bcache() { + local PN="bcache-tools" + local TDIR="${TEMP}/initramfs-bcache-temp" + if [ -d "${TDIR}" ] + then + rm -r "${TDIR}" || gen_die "Failed to clean out existing '${TDIR}'!" + fi + + populate_binpkg ${PN} + + mkdir -p "${TDIR}" || gen_die "Failed to create '${TDIR}'!" + + unpack "$(get_gkpkg_binpkg "${PN}")" "${TDIR}" + + cd "${TDIR}" || gen_die "Failed to chdir to '${TDIR}'!" + log_future_cpio_content + find . -print0 | "${CPIO_COMMAND}" ${CPIO_ARGS} --append -F "${CPIO_ARCHIVE}" \ + || gen_die "Failed to append bcache to cpio!" + + cd "${TEMP}" || die "Failed to chdir to '${TEMP}'!" + if isTrue "${CLEANUP}" + then + rm -rf "${TDIR}" + fi +} + append_blkid() { local PN="util-linux" local TDIR="${TEMP}/initramfs-blkid-temp" @@ -1869,6 +1896,7 @@ create_initramfs() { append_data 'iscsi' "${ISCSI}" append_data 'luks' "${LUKS}" append_data 'lvm' "${LVM}" + append_data 'bcache' "${BCACHE}" append_data 'mdadm' "${MDADM}" append_data 'modprobed' append_data 'multipath' "${MULTIPATH}" diff --git a/genkernel b/genkernel index 434d6be..1a12bbb 100755 --- a/genkernel +++ b/genkernel @@ -507,7 +507,6 @@ then print_warning 1 "${BOLD}WARNING... WARNING... WARNING...${NORMAL}" print_warning 1 'Additional kernel parameters that *may* be required to boot properly:' isTrue "${SPLASH}" && print_warning 1 "- Add \"vga=791 splash=silent,theme:${SPLASH_THEME} console=tty1 quiet\" if you use a splash framebuffer ]" - isTrue "${BCACHE}" && print_warning 1 '- Add "dobcache" for bcache support' isTrue "${BTRFS}" && print_warning 1 '- Add "dobtrfs" for Btrfs device scanning support' isTrue "${MULTIPATH}" && print_warning 1 '- Add "domultipath" for multipath support' isTrue "${ISCSI}" && print_warning 1 '- For iSCSI support, add at least:' diff --git a/gkbuilds/bcache-tools.gkbuild b/gkbuilds/bcache-tools.gkbuild new file mode 100644 index 0000000..f34828b --- /dev/null +++ b/gkbuilds/bcache-tools.gkbuild @@ -0,0 +1,27 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +src_configure() { + append-ldflags -static +} + +src_compile() { + PKG_CONFIG="$(tc-getPKG_CONFIG) -static" \ + gkmake V=1 +} + +src_install() { + gkmake V=1 UDEVLIBDIR="$(get_udevdir)" DESTDIR="${D}" install + + rm -rf \ + "${D}"/lib \ + "${D}"/usr/lib/initcpio \ + "${D}"/usr/sbin \ + "${D}"/usr/share + + "${STRIP}" --strip-all "${D}"/usr/lib/udev/bcache-register \ + || die "Failed to strip '${D}/usr/lib/udev/bcache-register'!" + + "${STRIP}" --strip-all "${D}"/usr/lib/udev/probe-bcache \ + || die "Failed to strip '${D}/usr/lib/udev/probe-bcache'!" +} diff --git a/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-build.patch b/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-build.patch new file mode 100644 index 0000000..6f6d4ca --- /dev/null +++ b/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-build.patch @@ -0,0 +1,88 @@ +--- a/Makefile ++++ b/Makefile +@@ -1,32 +1,63 @@ ++CC ?= gcc ++PREFIX = /usr ++UDEVLIBDIR = /lib/udev ++DRACUTLIBDIR = /lib/dracut ++INSTALL ?= install ++CFLAGS ?= -O2 -Wall -g ++PKG_CONFIG ?= pkg-config + +-PREFIX=/usr +-UDEVLIBDIR=/lib/udev +-DRACUTLIBDIR=/lib/dracut +-INSTALL=install +-CFLAGS+=-O2 -Wall -g ++BCACHE_TEST_LIBS = $(shell $(PKG_CONFIG) --libs openssl) -lm ++ ++MAKE_BCACHE_CFLAGS = $(shell $(PKG_CONFIG) --cflags uuid blkid) ++MAKE_BCACHE_LIBS = $(shell $(PKG_CONFIG) --libs uuid blkid) ++ ++PROBE_BCACHE_CFLAGS = $(shell $(PKG_CONFIG) --cflags uuid blkid) ++PROBE_BCACHE_LIBS = $(shell $(PKG_CONFIG) --libs uuid blkid) ++ ++BCACHE_SUPER_SHOW_CFLAGS = -std=gnu99 $(shell $(PKG_CONFIG) --cflags uuid) ++BCACHE_SUPER_SHOW_LIBS = $(shell $(PKG_CONFIG) --libs uuid) + + all: make-bcache probe-bcache bcache-super-show bcache-register + + install: make-bcache probe-bcache bcache-super-show +- $(INSTALL) -m0755 make-bcache bcache-super-show $(DESTDIR)${PREFIX}/sbin/ +- $(INSTALL) -m0755 probe-bcache bcache-register $(DESTDIR)$(UDEVLIBDIR)/ +- $(INSTALL) -m0644 69-bcache.rules $(DESTDIR)$(UDEVLIBDIR)/rules.d/ ++ $(INSTALL) -m0755 -d $(DESTDIR)${PREFIX}/sbin ++ $(INSTALL) -D -m0755 make-bcache bcache-super-show $(DESTDIR)${PREFIX}/sbin/ ++ $(INSTALL) -m0755 -d $(DESTDIR)$(UDEVLIBDIR)/rules.d ++ $(INSTALL) -m0755 probe-bcache bcache-register $(DESTDIR)$(UDEVLIBDIR)/ ++ $(INSTALL) -m0644 69-bcache.rules $(DESTDIR)$(UDEVLIBDIR)/rules.d/ ++ $(INSTALL) -m0755 -d $(DESTDIR)${PREFIX}/share/man/man8 + $(INSTALL) -m0644 -- *.8 $(DESTDIR)${PREFIX}/share/man/man8/ +- $(INSTALL) -D -m0755 initramfs/hook $(DESTDIR)/usr/share/initramfs-tools/hooks/bcache +- $(INSTALL) -D -m0755 initcpio/install $(DESTDIR)/usr/lib/initcpio/install/bcache ++ $(INSTALL) -D -m0755 initramfs/hook $(DESTDIR)/usr/share/initramfs-tools/hooks/bcache ++ $(INSTALL) -D -m0755 initcpio/install $(DESTDIR)/usr/lib/initcpio/install/bcache + $(INSTALL) -D -m0755 dracut/module-setup.sh $(DESTDIR)$(DRACUTLIBDIR)/modules.d/90bcache/module-setup.sh + # $(INSTALL) -m0755 bcache-test $(DESTDIR)${PREFIX}/sbin/ + + clean: +- $(RM) -f make-bcache probe-bcache bcache-super-show bcache-test -- *.o +- +-bcache-test: LDLIBS += `pkg-config --libs openssl` -lm +-make-bcache: LDLIBS += `pkg-config --libs uuid blkid` +-make-bcache: CFLAGS += `pkg-config --cflags uuid blkid` +-make-bcache: bcache.o +-probe-bcache: LDLIBS += `pkg-config --libs uuid blkid` +-probe-bcache: CFLAGS += `pkg-config --cflags uuid blkid` +-bcache-super-show: LDLIBS += `pkg-config --libs uuid` +-bcache-super-show: CFLAGS += -std=gnu99 +-bcache-super-show: bcache.o ++ $(RM) -f make-bcache probe-bcache bcache-register bcache-super-show bcache-test -- *.o ++ ++make-bcache: bcache.o make-bcache.o ++ $(CC) -o $@ $^ $(LDFLAGS) $(MAKE_BCACHE_LIBS) ++ ++bcache.o: bcache.c bcache.h ++ $(CC) -c $(CFLAGS) $< -o $@ ++ ++make-bcache.o: make-bcache.c ++ $(CC) -c $(CFLAGS) $(MAKE_BCACHE_CFLAGS) $< -o $@ ++ ++probe-bcache: probe-bcache.o ++ $(CC) -o $@ $^ $(LDFLAGS) $(PROBE_BCACHE_LIBS) ++ ++probe-bcache.o: probe-bcache.c ++ $(CC) -c $(CFLAGS) $(PROBE_BCACHE_CFLAGS) $< -o $@ ++ ++bcache-super-show: bcache.o bcache-super-show.o ++ $(CC) -o $@ $^ $(LDFLAGS) $(BCACHE_SUPER_SHOW_LIBS) ++ ++bcache-super-show.o: bcache-super-show.c ++ $(CC) -c $(CFLAGS) $(BCACHE_SUPER_SHOW_CFLAGS) $< -o $@ ++ + bcache-register: bcache-register.o ++ $(CC) -o $@ $^ $(LDFLAGS) $(BCACHE_SUPER_SHOW_LIBS) ++ ++bcache-register.o: bcache-register.c ++ $(CC) -c $(CFLAGS) $< -o $@ + diff --git a/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-crc64.patch b/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-crc64.patch new file mode 100644 index 0000000..cc4e0c5 --- /dev/null +++ b/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-crc64.patch @@ -0,0 +1,53 @@ +--- a/bcache.c ++++ b/bcache.c +@@ -26,7 +26,7 @@ + * x^7 + x^4 + x + 1 + */ + +-static const uint64_t crc_table[256] = { ++const uint64_t crc_table[256] = { + 0x0000000000000000ULL, 0x42F0E1EBA9EA3693ULL, 0x85E1C3D753D46D26ULL, + 0xC711223CFA3E5BB5ULL, 0x493366450E42ECDFULL, 0x0BC387AEA7A8DA4CULL, + 0xCCD2A5925D9681F9ULL, 0x8E224479F47CB76AULL, 0x9266CC8A1C85D9BEULL, +@@ -114,16 +114,3 @@ static const uint64_t crc_table[256] = { + 0x5DEDC41A34BBEEB2ULL, 0x1F1D25F19D51D821ULL, 0xD80C07CD676F8394ULL, + 0x9AFCE626CE85B507ULL + }; +- +-inline uint64_t crc64(const void *_data, size_t len) +-{ +- uint64_t crc = 0xFFFFFFFFFFFFFFFFULL; +- const unsigned char *data = _data; +- +- while (len--) { +- int i = ((int) (crc >> 56) ^ *data++) & 0xFF; +- crc = crc_table[i] ^ (crc << 8); +- } +- +- return crc ^ 0xFFFFFFFFFFFFFFFFULL; +-} +--- a/bcache.h ++++ b/bcache.h +@@ -115,7 +115,20 @@ BITMASK(BDEV_STATE, struct cache_sb, flags, 61, 2); + #define BDEV_STATE_DIRTY 2U + #define BDEV_STATE_STALE 3U + +-uint64_t crc64(const void *_data, size_t len); ++extern const uint64_t crc_table[]; ++ ++static inline uint64_t crc64(const void *_data, size_t len) ++{ ++ uint64_t crc = 0xFFFFFFFFFFFFFFFFULL; ++ const unsigned char *data = _data; ++ ++ while (len--) { ++ int i = ((int) (crc >> 56) ^ *data++) & 0xFF; ++ crc = crc_table[i] ^ (crc << 8); ++ } ++ ++ return crc ^ 0xFFFFFFFFFFFFFFFFULL; ++} + + #define node(i, j) ((void *) ((i)->d + (j))) + #define end(i) node(i, (i)->keys) + diff --git a/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-modprobe.patch b/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-modprobe.patch new file mode 100644 index 0000000..aedfe29 --- /dev/null +++ b/patches/bcache-tools/1.0.8_p20141204/bcache-tools-1.0.8_p20141204-modprobe.patch @@ -0,0 +1,11 @@ +--- a/69-bcache.rules ++++ b/69-bcache.rules +@@ -18,7 +18,7 @@ ENV{ID_FS_TYPE}!="bcache", GOTO="bcache_backing_end" + ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" + + LABEL="bcache_backing_found" +-RUN{builtin}+="kmod load bcache" ++RUN+="/sbin/modprobe bcache" + RUN+="bcache-register $tempnode" + LABEL="bcache_backing_end" +