diff options
Diffstat (limited to 'main/mkinitfs/0001-add-zpool-import-capability.patch')
-rw-r--r-- | main/mkinitfs/0001-add-zpool-import-capability.patch | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/main/mkinitfs/0001-add-zpool-import-capability.patch b/main/mkinitfs/0001-add-zpool-import-capability.patch new file mode 100644 index 0000000000..af280cd832 --- /dev/null +++ b/main/mkinitfs/0001-add-zpool-import-capability.patch @@ -0,0 +1,121 @@ +From be20737c8c6ca8b4ba94302f6b6c9725bc98565d Mon Sep 17 00:00:00 2001 +From: Mark Riedesel <mark@klowner.com> +Date: Sat, 17 Sep 2016 10:46:03 -0500 +Subject: [PATCH] add zpool import capability + +--- + features.d/zfs.files | 2 ++ + features.d/zfs.modules | 7 +++++++ + initramfs-init.in | 5 +++++ + nlplug-findfs.c | 17 +++++++++++++++-- + 4 files changed, 29 insertions(+), 2 deletions(-) + create mode 100644 features.d/zfs.files + create mode 100644 features.d/zfs.modules + +diff --git a/features.d/zfs.files b/features.d/zfs.files +new file mode 100644 +index 0000000..c821e15 +--- /dev/null ++++ b/features.d/zfs.files +@@ -0,0 +1,2 @@ ++/usr/sbin/zfs ++/usr/sbin/zpool +diff --git a/features.d/zfs.modules b/features.d/zfs.modules +new file mode 100644 +index 0000000..be5225a +--- /dev/null ++++ b/features.d/zfs.modules +@@ -0,0 +1,7 @@ ++extra/avl ++extra/nvpair ++extra/spl ++extra/unicode ++extra/zcommon ++extra/zfs ++extra/zpios +diff --git a/initramfs-init.in b/initramfs-init.in +index 64b1b5b..24a25c9 100755 +--- a/initramfs-init.in ++++ b/initramfs-init.in +@@ -363,6 +363,11 @@ if [ -n "$KOPT_nbd" ]; then + setup_nbd || echo "Failed to setup nbd device." + fi + ++if [ "$KOPT_rootfstype" = "zfs" ]; then ++ # zpool reports /dev/zfs missing if it can't read /etc/mtab ++ ln -s /proc/mounts /etc/mtab ++fi ++ + # check if root=... was set + if [ -n "$KOPT_root" ]; then + if [ "$SINGLEMODE" = "yes" ]; then +diff --git a/nlplug-findfs.c b/nlplug-findfs.c +index 7907389..7104d40 100644 +--- a/nlplug-findfs.c ++++ b/nlplug-findfs.c +@@ -51,11 +51,12 @@ + + #define LVM_PATH "/sbin/lvm" + #define MDADM_PATH "/sbin/mdadm" ++#define ZPOOL_PATH "/usr/sbin/zpool" + + static int dodebug; + static char *default_envp[2]; + char *argv0; +-static int use_mdadm, use_lvm; ++static int use_mdadm, use_lvm, use_zpool; + + #if defined(DEBUG) + #include <stdarg.h> +@@ -496,6 +497,15 @@ static void start_lvm2(char *devnode) + spawn_command(&spawnmgr, lvm2_argv, 0); + } + ++static void start_zpool(char *uuid) { ++ char *zpool_argv[] = { ++ ZPOOL_PATH, "import", uuid, ++ NULL ++ }; ++ if (use_zpool && uuid) ++ spawn_command(&spawnmgr, zpool_argv, 0); ++} ++ + static int read_pass(char *pass, size_t pass_size) + { + struct termios old_flags, new_flags; +@@ -913,6 +923,7 @@ static int searchdev(struct uevent *ev, const char *searchdev, int scanbootmedia + blkid_get_cache(&conf->blkid_cache, NULL); + + type = blkid_get_tag_value(conf->blkid_cache, "TYPE", ev->devnode); ++ uuid = blkid_get_tag_value(conf->blkid_cache, "UUID", ev->devnode); + + if (searchdev != NULL) { + if (strncmp("LABEL=", searchdev, 6) == 0) { +@@ -920,7 +931,6 @@ static int searchdev(struct uevent *ev, const char *searchdev, int scanbootmedia + if (label && strcmp(label, searchdev+6) == 0) + rc = FOUND_DEVICE; + } else if (strncmp("UUID=", searchdev, 5) == 0) { +- uuid = blkid_get_tag_value(conf->blkid_cache, "UUID", ev->devnode); + if (uuid && strcmp(uuid, searchdev+5) == 0) + rc = FOUND_DEVICE; + } +@@ -934,6 +944,8 @@ static int searchdev(struct uevent *ev, const char *searchdev, int scanbootmedia + start_mdadm(ev->devnode); + } else if (strcmp("LVM2_member", type) == 0) { + start_lvm2(ev->devnode); ++ } else if (strcmp("zfs_member", type) == 0) { ++ start_zpool(uuid); + } else if (scanbootmedia) { + rc = scandev(conf, ev->devnode, type); + } +@@ -1133,6 +1145,7 @@ int main(int argc, char *argv[]) + conf.uevent_timeout = DEFAULT_EVENT_TIMEOUT; + use_lvm = access(LVM_PATH, X_OK) == 0; + use_mdadm = access(MDADM_PATH, X_OK) == 0; ++ use_zpool = access(ZPOOL_PATH, X_OK) == 0; + + argv0 = strrchr(argv[0], '/'); + if (argv0++ == NULL) +-- +2.11.0 + |