From d1f76c9546758611bcadd6ad10fc0c4c1ceb14ee Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Sun, 10 Jun 2012 19:05:38 +0200 Subject: [PATCH] Port mdstart patch from busybox 1.19.3 to 1.20.1 --- include/applets.src.h | 1 + util-linux/Config.src | 7 ++++++ util-linux/Kbuild.src | 1 + util-linux/mdStart.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 util-linux/mdStart.c diff --git a/include/applets.src.h b/include/applets.src.h index 252a060..0b199bc 100644 --- a/include/applets.src.h +++ b/include/applets.src.h @@ -239,6 +239,7 @@ IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP)) IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP)) IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP)) IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum)) +IF_MDSTART(APPLET(mdstart, BB_DIR_SBIN, BB_SUID_DROP)) IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP)) IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir)) IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat)) diff --git a/util-linux/Config.src b/util-linux/Config.src index 57a52ce..e07fe2b 100644 --- a/util-linux/Config.src +++ b/util-linux/Config.src @@ -404,6 +404,13 @@ config LSUSB This version uses sysfs (/sys/bus/usb/devices) only. +config MDSTART + bool "mdstart" + default n + help + Allows you to autostart /dev/md devices if using an initramfs to + boot. + config MKSWAP bool "mkswap" default y diff --git a/util-linux/Kbuild.src b/util-linux/Kbuild.src index 468fc6b..0bc9a9b 100644 --- a/util-linux/Kbuild.src +++ b/util-linux/Kbuild.src @@ -24,6 +24,7 @@ lib-$(CONFIG_HWCLOCK) += hwclock.o lib-$(CONFIG_IPCRM) += ipcrm.o lib-$(CONFIG_IPCS) += ipcs.o lib-$(CONFIG_LOSETUP) += losetup.o +lib-$(CONFIG_MDSTART) += mdStart.o lib-$(CONFIG_LSPCI) += lspci.o lib-$(CONFIG_LSUSB) += lsusb.o lib-$(CONFIG_MKFS_EXT2) += mkfs_ext2.o diff --git a/util-linux/mdStart.c b/util-linux/mdStart.c new file mode 100644 index 0000000..0c55bab --- /dev/null +++ b/util-linux/mdStart.c @@ -0,0 +1,66 @@ +/* + * Linux 2.6(+) RAID Autostarter + * + * Copyright (C) 2005 by Tim Yamin + * Copyright (C) 2012 by Sebastian Pipping + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +//usage:#define mdstart_trivial_usage +//usage: "[PARTITION] MD-NODE [[PARTITION] MD-NODE ...]" +//usage: +//usage:#define mdstart_full_usage "\n\n" +//usage: "Run the RAID_AUTORUN ioctl on the given MD number" + +#include +#include +#include +#include +#include +#include + +extern int +mdstart_main(int argc, char *argv[]) +{ + int i, fd, part = 0, retval = 0; + + if(argc < 2) + { + bb_show_usage(); + } + + for(i = 1; i < argc; i++) + { + if(sscanf(argv[i], "%d", &part) == 1) + continue; + + fd = open(argv[i], 0, 0); + if (fd >= 0) + { + ioctl(fd, RAID_AUTORUN, part); + close(fd); + } else + { + printf("Error: Failed to open %s!\n", argv[i]); + retval=1; + } + + part = 0; + } + + return retval; +} -- 1.7.10.2