forked from pool/bcache-tools
Jan Engelhardt
3dff4d17f4
- Remove dependence of smartcols bcache-tools.spec, bcache-tools code doesn't need it now. (jsc#SLE-9807) - Remove 1001-udev-do-not-rely-on-DRIVER-variable.patch because we have 0013-bcache-tools-Export-CACHED_UUID-and-CACHED_LABEL.patch to provide static UUIDs. (jsc#SLE-9807) - bcache-tools: add man page bcache-status.8 (jsc#SLE-9807) 0017-bcache-tools-add-man-page-bcache-status.8.patch - bcache-tools: add bcache-status (jsc#SLE-9807) 0016-bcache-tools-add-bcache-status.patch - bcache-tools: make: permit only one cache device to be specified (jsc#SLE-9807) 0015-bcache-tools-make-permit-only-one-cache-device-to-be.patch - bcache-tools: Remove the dependency on libsmartcols (jsc#SLE-9807) 0014-bcache-tools-Remove-the-dependency-on-libsmartcols.patch - bcache-tools: Export CACHED_UUID and CACHED_LABEL (jsc#SLE-9807) 0013-bcache-tools-Export-CACHED_UUID-and-CACHED_LABEL.patch - bcache-tools: Fix potential coredump issues (jsc#SLE-9807) 0012-bcache-tools-Fix-potential-coredump-issues.patch - bcache-tools: add print_cache_set_supported_feature_sets() in lib.c (jsc#SLE-9807) 0011-bcache-tools-add-print_cache_set_supported_feature_s.patch - bcache-tools: add large_bucket incompat feature (jsc#SLE-9807) 0010-bcache-tools-add-large_bucket-incompat-feature.patch - bcache-tools: upgrade super block versions for feature sets (jsc#SLE-9807) 0009-bcache-tools-upgrade-super-block-versions-for-featur.patch - bcache-tools: define separated super block for in-memory and on-disk format (jsc#SLE-9807) OBS-URL: https://build.opensuse.org/request/show/841483 OBS-URL: https://build.opensuse.org/package/show/filesystems/bcache-tools?expand=0&rev=27
132 lines
4.9 KiB
Diff
132 lines
4.9 KiB
Diff
From 2cfea71ab753fc65f1d97b0af327e6e9e3fa204b Mon Sep 17 00:00:00 2001
|
|
From: Ryan Harper <ryan.harper@canonical.com>
|
|
Date: Wed, 19 Aug 2020 18:51:27 +0800
|
|
Subject: [PATCH 13/17] bcache-tools: Export CACHED_UUID and CACHED_LABEL
|
|
Git-commit: 2cfea71ab753fc65f1d97b0af327e6e9e3fa204b
|
|
Patch-mainline: bcache-tools-1.1
|
|
References: jsc#SLE-9807
|
|
|
|
https://github.com/koverstreet/bcache-tools/pull/1
|
|
|
|
Add bcache-export-cached helper to export CACHED_UUID and CACHED_LABEL always
|
|
|
|
Linux kernel bcache driver does not always emit a uevent[1] for when
|
|
a backing device is bound to a bcacheN device. When this happens, the udev
|
|
rule for creating /dev/bcache/by-uuid or /dev/bcache/by-label symlinks does
|
|
not fire and removes any persistent symlink to a specific backing device
|
|
since the bcache minor numbers (bcache0, 1, 2) are not guaranteed across reboots.
|
|
|
|
This script reads the superblock of the bcache device slaves,ensuring the slave
|
|
is a backing device via sb.version check, extracts the dev.uuid and
|
|
dev.label values and exports them to udev for triggering the symlink rules in
|
|
the existing rules file.
|
|
|
|
1. https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1729145
|
|
|
|
Signed-off-by: Shaoxiong Li <dahefanteng@gmail.com>
|
|
Signed-off-by: Coly Li <colyli@suse.de>
|
|
---
|
|
69-bcache.rules | 7 +++----
|
|
Makefile | 2 +-
|
|
bcache-export-cached | 31 +++++++++++++++++++++++++++++++
|
|
initcpio/install | 1 +
|
|
initramfs/hook | 1 +
|
|
5 files changed, 37 insertions(+), 5 deletions(-)
|
|
create mode 100644 bcache-export-cached
|
|
|
|
diff --git a/69-bcache.rules b/69-bcache.rules
|
|
index 9cc7f0d..fd25f5b 100644
|
|
--- a/69-bcache.rules
|
|
+++ b/69-bcache.rules
|
|
@@ -23,10 +23,9 @@ RUN+="bcache-register $tempnode"
|
|
LABEL="bcache_backing_end"
|
|
|
|
# Cached devices: symlink
|
|
-DRIVER=="bcache", ENV{CACHED_UUID}=="?*", \
|
|
- SYMLINK+="bcache/by-uuid/$env{CACHED_UUID}"
|
|
-DRIVER=="bcache", ENV{CACHED_LABEL}=="?*", \
|
|
- SYMLINK+="bcache/by-label/$env{CACHED_LABEL}"
|
|
+IMPORT{program}="bcache-export-cached $tempnode"
|
|
+ENV{CACHED_UUID}=="?*", SYMLINK+="bcache/by-uuid/$env{CACHED_UUID}"
|
|
+ENV{CACHED_LABEL}=="?*", SYMLINK+="bcache/by-label/$env{CACHED_LABEL}"
|
|
|
|
LABEL="bcache_end"
|
|
|
|
diff --git a/Makefile b/Makefile
|
|
index 8b87a67..90db951 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -9,7 +9,7 @@ all: make-bcache probe-bcache bcache-super-show bcache-register bcache
|
|
|
|
install: make-bcache probe-bcache bcache-super-show
|
|
$(INSTALL) -m0755 make-bcache bcache-super-show bcache $(DESTDIR)${PREFIX}/sbin/
|
|
- $(INSTALL) -m0755 probe-bcache bcache-register $(DESTDIR)$(UDEVLIBDIR)/
|
|
+ $(INSTALL) -m0755 probe-bcache bcache-register bcache-export-cached $(DESTDIR)$(UDEVLIBDIR)/
|
|
$(INSTALL) -m0644 69-bcache.rules $(DESTDIR)$(UDEVLIBDIR)/rules.d/
|
|
$(INSTALL) -m0644 -- *.8 $(DESTDIR)${PREFIX}/share/man/man8/
|
|
$(INSTALL) -D -m0755 initramfs/hook $(DESTDIR)/usr/share/initramfs-tools/hooks/bcache
|
|
diff --git a/bcache-export-cached b/bcache-export-cached
|
|
new file mode 100644
|
|
index 0000000..b345922
|
|
--- /dev/null
|
|
+++ b/bcache-export-cached
|
|
@@ -0,0 +1,31 @@
|
|
+#!/bin/sh
|
|
+#
|
|
+# This program reads the bcache superblock on bcacheX slaves to extract the
|
|
+# dev.uuid and dev.label which refer to a specific backing device.
|
|
+#
|
|
+# It integrates with udev 'import' by writing CACHED_UUID=X and optionally
|
|
+# CACHED_LABEL=X for the backing device of the provided bcache device.
|
|
+# Ignore caching devices by skipping unless sb.version=1
|
|
+#
|
|
+# There is 1 and only 1 backing device (slaves/*) for a bcache device.
|
|
+
|
|
+TEMPNODE=${1} # /dev/bcacheN
|
|
+DEVNAME=${TEMPNODE##*/} # /dev/bcacheN -> bcacheN
|
|
+
|
|
+for slave in "/sys/class/block/$DEVNAME/slaves"/*; do
|
|
+ [ -d "$slave" ] || continue
|
|
+ bcache-super-show "/dev/${slave##*/}" |
|
|
+ awk '$1 == "sb.version" { sbver=$2; }
|
|
+ $1 == "dev.uuid" { uuid=$2; }
|
|
+ $1 == "dev.label" && $2 != "(empty)" { label=$2; }
|
|
+ END {
|
|
+ if (sbver == 1 && uuid) {
|
|
+ print("CACHED_UUID=" uuid)
|
|
+ if (label) print("CACHED_LABEL=" label)
|
|
+ exit(0)
|
|
+ }
|
|
+ exit(1);
|
|
+ }'
|
|
+ # awk exits 0 if it found a backing device.
|
|
+ [ $? -eq 0 ] && exit 0
|
|
+done
|
|
diff --git a/initcpio/install b/initcpio/install
|
|
index 72d4231..c1a86fe 100755
|
|
--- a/initcpio/install
|
|
+++ b/initcpio/install
|
|
@@ -1,6 +1,7 @@
|
|
#!/bin/bash
|
|
build() {
|
|
add_module bcache
|
|
+ add_binary /usr/lib/udev/bcache-export-cached
|
|
add_binary /usr/lib/udev/bcache-register
|
|
add_binary /usr/lib/udev/probe-bcache
|
|
add_file /usr/lib/udev/rules.d/69-bcache.rules
|
|
diff --git a/initramfs/hook b/initramfs/hook
|
|
index a6baa24..485491d 100755
|
|
--- a/initramfs/hook
|
|
+++ b/initramfs/hook
|
|
@@ -22,6 +22,7 @@ elif [ -e /lib/udev/rules.d/69-bcache.rules ]; then
|
|
cp -pt "${DESTDIR}/lib/udev/rules.d" /lib/udev/rules.d/69-bcache.rules
|
|
fi
|
|
|
|
+copy_exec /lib/udev/bcache-export-cached
|
|
copy_exec /lib/udev/bcache-register
|
|
copy_exec /lib/udev/probe-bcache
|
|
manual_add_modules bcache
|
|
--
|
|
2.26.2
|
|
|