diff --git a/0169-btrfs-progs-udev-add-rules-for-dm-devices.patch b/0169-btrfs-progs-udev-add-rules-for-dm-devices.patch new file mode 100644 index 0000000..a7ae69d --- /dev/null +++ b/0169-btrfs-progs-udev-add-rules-for-dm-devices.patch @@ -0,0 +1,82 @@ +From 8bd39e44efa9fdbf221200b3d680b2d8205c89e9 Mon Sep 17 00:00:00 2001 +From: Jeff Mahoney +Date: Fri, 6 May 2016 15:18:32 -0400 +Subject: [PATCH v2] btrfs-progs: udev: add rules for dm devices +References: bsc#912170 bsc#888215 +Patch-upstream: Submitted to linux-btrfs, 9 May 2016 + +Systemd's btrfs rule runs btrfs dev ready on each device +as it's discovered. The btrfs command is executed as a builtin +command via an IMPORT{builtin} rule, which means it gets +executed at rule evaluation time, not rule execution time. That +means that the device mapper links haven't been setup yet and the only +nodes that can be depended upon are /dev/dm-#. That we see +/dev/mapper/name names in /proc/mounts is only because we replace the +device name we have cached with the one passed in via mount. If +we have a multi-device file system and the primary device is removed, +the remaining devices will show /dev/dm-#. In addition, if the +udev rule is executed again by someone generating a change event (e.g. +partprobe), the names are also replaced by the /dev/dm-# names. + +This patch adds a new rule that adds a run rule that calls btrfs dev +ready again using the device mapper links once they're created. +--- + 64-btrfs-dm.rules | 10 ++++++++++ + Makefile.in | 8 ++++++++ + configure.ac | 2 ++ + 3 files changed, 20 insertions(+) + create mode 100644 64-btrfs-dm.rules + +--- /dev/null ++++ b/64-btrfs-dm.rules +@@ -0,0 +1,10 @@ ++SUBSYSTEM!="block", GOTO="btrfs_end" ++KERNEL!="dm-[0-9]*", GOTO="btrfs_end" ++ACTION!="add|change", GOTO="btrfs_end" ++ENV{ID_FS_TYPE}!="btrfs", GOTO="btrfs_end" ++ ++# Once the device mapper symlink is created, tell btrfs about it ++# so we get the friendly name in /proc/mounts (and tools that read it) ++ENV{DM_NAME}=="?*", RUN{builtin}+="btrfs ready /dev/mapper/$env{DM_NAME}" ++ ++LABEL="btrfs_end" +--- a/Makefile.in ++++ b/Makefile.in +@@ -84,11 +84,15 @@ libbtrfs_headers = send-stream.h send-ut + extent_io.h ioctl.h ctree.h btrfsck.h version.h + TESTS = fsck-tests.sh convert-tests.sh + ++udev_rules = 64-btrfs-dm.rules ++ + prefix ?= @prefix@ + exec_prefix = @exec_prefix@ + bindir = @bindir@ + libdir ?= @libdir@ + incdir = @includedir@/btrfs ++udevdir = @UDEVDIR@ ++udevruledir = ${udevdir}/rules.d + + ifeq ("$(origin V)", "command line") + BUILD_VERBOSE = $(V) +@@ -390,6 +394,10 @@ install: $(libs) $(progs_install) $(INST + cp -a $(lib_links) $(DESTDIR)$(libdir) + $(INSTALL) -m755 -d $(DESTDIR)$(incdir) + $(INSTALL) -m644 $(headers) $(DESTDIR)$(incdir) ++ifneq ($(udevdir), "") ++ $(INSTALL) -m755 -d $(DESTDIR)$(udevruledir) ++ $(INSTALL) -m644 $(udev_rules) $(DESTDIR)$(udevruledir) ++endif + + install-static: $(progs_static) $(INSTALLDIRS) + $(INSTALL) -m755 -d $(DESTDIR)$(bindir) +--- a/configure.ac ++++ b/configure.ac +@@ -124,6 +124,8 @@ PKG_STATIC(UUID_LIBS_STATIC, [uuid]) + PKG_CHECK_MODULES(ZLIB, [zlib]) + PKG_STATIC(ZLIB_LIBS_STATIC, [zlib]) + ++PKG_CHECK_VAR([UDEVDIR], [udev], [udevdir]) ++ + dnl lzo library does not provide pkg-config, let use classic way + AC_CHECK_LIB([lzo2], [lzo_version], [ + LZO2_LIBS="-llzo2" diff --git a/btrfs-progs-no-PKG_CHECK_VAR b/btrfs-progs-no-PKG_CHECK_VAR new file mode 100644 index 0000000..cb96e80 --- /dev/null +++ b/btrfs-progs-no-PKG_CHECK_VAR @@ -0,0 +1,27 @@ +From: Jeff Mahoney +Subject: btrfs-progs: make PKG_CHECK_VAR optional +Patch-upstream: Never, SLE11-specific + +SLE11 has an old enough pkg-config that PKG_CHECK_VAR doesn't exist. + +We can skip checking it because SLE11 doesn't have systemd's btrfs udev +rules either and 'make install' does the right thing if UDEVDIR is empty. +--- + + configure.ac | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 4af7474..64b1c7a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -124,7 +124,8 @@ PKG_STATIC(UUID_LIBS_STATIC, [uuid]) + PKG_CHECK_MODULES(ZLIB, [zlib]) + PKG_STATIC(ZLIB_LIBS_STATIC, [zlib]) + +-PKG_CHECK_VAR([UDEVDIR], [udev], [udevdir]) ++m4_ifdef([PKG_CHECK_VAR], ++[PKG_CHECK_VAR([UDEVDIR], [udev], [udevdir])]) + + dnl lzo library does not provide pkg-config, let use classic way + AC_CHECK_LIB([lzo2], [lzo_version], [ diff --git a/btrfsprogs.changes b/btrfsprogs.changes index 3cc66f8..1a900b6 100644 --- a/btrfsprogs.changes +++ b/btrfsprogs.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Mon May 9 15:47:01 UTC 2016 - jeffm@suse.com + +- Add udev rules for dm devices (bsc#912170 bsc#888215) + - Added patch: 0169-btrfs-progs-udev-add-rules-for-dm-devices.patch + - Added patch: btrfs-progs-no-PKG_CHECK_VAR + ------------------------------------------------------------------- Tue May 3 00:00:00 CEST 2016 - dsterba@suse.cz diff --git a/btrfsprogs.spec b/btrfsprogs.spec index d685eb9..13b7aaa 100644 --- a/btrfsprogs.spec +++ b/btrfsprogs.spec @@ -40,8 +40,10 @@ Source4: setup-btrfs.sh Patch163: 0163-btrfs-progs-fsck-fix-segfault.patch Patch167: 0167-Btrfs-progs-make-find_and_setup_root-return-an-error.patch Patch168: 0168-Btrfs-progs-don-t-bug-out-if-we-can-t-find-the-last-.patch +Patch169: 0169-btrfs-progs-udev-add-rules-for-dm-devices.patch Patch1000: local-version-override.patch +Patch1001: btrfs-progs-no-PKG_CHECK_VAR BuildRequires: asciidoc BuildRequires: autoconf @@ -112,7 +114,9 @@ build applications to interface with btrfs. %patch163 -p1 %patch167 -p1 %patch168 -p1 +%patch169 -p1 %patch1000 -p1 +%patch1001 -p1 %build ./autogen.sh @@ -257,6 +261,10 @@ done %dir %{_datadir}/bash-completion/completions %{_datadir}/bash-completion/completions/btrfs +%if 0%{?suse_version} >= 1200 +%{_udevrulesdir}/64-btrfs-dm.rules +%endif + %if 0%{?for_debugging:1} /sbin/btrfs-find-root %{_sbindir}/btrfs-find-root