diff options
author | John Crispin <blogic@openwrt.org> | 2014-06-11 12:59:10 +0000 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2014-06-11 12:59:10 +0000 |
commit | 41aefc93320d42ff4ae8baab83f61b60c6e65d2b (patch) | |
tree | 28b5cc56bd1387953c7206e3e5924fe7a120d186 /target/linux/generic/patches-3.14/491-ubi-auto-create-ubiblock-device-for-rootfs.patch | |
parent | f9d01db1cd353a17ffee483ff5d225b8f5e7b0ba (diff) | |
download | upstream-41aefc93320d42ff4ae8baab83f61b60c6e65d2b.tar.gz upstream-41aefc93320d42ff4ae8baab83f61b60c6e65d2b.tar.bz2 upstream-41aefc93320d42ff4ae8baab83f61b60c6e65d2b.zip |
kernel: rootfs auto-mount on ubi
Similar to the rootfs hacks on NOR flash devices, this series
introduces support for auto-attaching (ubi device), auto-creating
(ubiblock device) and mounting the "rootfs" (ubifs or squashfs)
volume.
This is needed so OpenWrt can start without relying on the bootloader
to pass the ubi.mtd, ubi.block, rootfs and rootfstype parameters, but
instead auto-detect the root filesystem according to a simple convention.
OpenWrt-specific:
490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
491-ubi-auto-create-ubiblock-device-for-rootfs.patch
492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch
493-ubi-set-ROOT_DEV-to-ubiblock-rootfs-if-unset.patch
sent upstream:
552-ubifs-respect-silent-mount-flag.patch
http://lists.infradead.org/pipermail/linux-mtd/2014-May/053893.html
v2: actually retry with MS_RDONLY when mounting read-only ubifs root
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@41119 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/patches-3.14/491-ubi-auto-create-ubiblock-device-for-rootfs.patch')
-rw-r--r-- | target/linux/generic/patches-3.14/491-ubi-auto-create-ubiblock-device-for-rootfs.patch | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/target/linux/generic/patches-3.14/491-ubi-auto-create-ubiblock-device-for-rootfs.patch b/target/linux/generic/patches-3.14/491-ubi-auto-create-ubiblock-device-for-rootfs.patch new file mode 100644 index 0000000000..e1992c9a29 --- /dev/null +++ b/target/linux/generic/patches-3.14/491-ubi-auto-create-ubiblock-device-for-rootfs.patch @@ -0,0 +1,74 @@ +From 0f3966579815f889bb2fcb4846152c35f65e79c4 Mon Sep 17 00:00:00 2001 +From: Daniel Golle <daniel@makrotopia.org> +Date: Thu, 15 May 2014 21:06:33 +0200 +Subject: [PATCH 2/5] ubi: auto-create ubiblock device for rootfs +To: openwrt-devel@lists.openwrt.org + +Signed-off-by: Daniel Golle <daniel@makrotopia.org> +--- + drivers/mtd/ubi/block.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + +diff --git a/drivers/mtd/ubi/block.c b/drivers/mtd/ubi/block.c +index 8d659e6..2dbe2f4 100644 +--- a/drivers/mtd/ubi/block.c ++++ b/drivers/mtd/ubi/block.c +@@ -593,6 +593,44 @@ static int __init ubiblock_create_from_param(void) + return ret; + } + ++#define UBIFS_NODE_MAGIC 0x06101831 ++static inline int ubi_vol_is_ubifs(struct ubi_volume_desc *desc) ++{ ++ int ret; ++ uint32_t magic_of, magic; ++ ret = ubi_read(desc, 0, (char *)&magic_of, 0, 4); ++ if (ret) ++ return 0; ++ magic = le32_to_cpu(magic_of); ++ return magic == UBIFS_NODE_MAGIC; ++} ++ ++static void __init ubiblock_create_auto_rootfs(void) ++{ ++ int ubi_num, ret, is_ubifs; ++ struct ubi_volume_desc *desc; ++ struct ubi_volume_info vi; ++ ++ for (ubi_num = 0; ubi_num < UBI_MAX_DEVICES; ubi_num++) { ++ desc = ubi_open_volume_nm(ubi_num, "rootfs", UBI_READONLY); ++ if (IS_ERR(desc)) ++ continue; ++ ++ ubi_get_volume_info(desc, &vi); ++ is_ubifs = ubi_vol_is_ubifs(desc); ++ ubi_close_volume(desc); ++ if (is_ubifs) ++ break; ++ ++ ret = ubiblock_create(&vi); ++ if (ret) ++ ubi_err("block: can't add '%s' volume, err=%d\n", ++ vi.name, ret); ++ /* always break if we get here */ ++ break; ++ } ++} ++ + static void ubiblock_remove_all(void) + { + struct ubiblock *next; +@@ -623,6 +661,10 @@ int __init ubiblock_init(void) + if (ret) + goto err_remove; + ++ /* auto-attach "rootfs" volume if existing and non-ubifs */ ++ if (config_enabled(CONFIG_MTD_ROOTFS_ROOT_DEV)) ++ ubiblock_create_auto_rootfs(); ++ + /* + * Block devices are only created upon user requests, so we ignore + * existing volumes. +-- +1.9.2 + |