--- a/block/partitions/Kconfig +++ b/block/partitions/Kconfig @@ -101,6 +101,13 @@ config ATARI_PARTITION Say Y here if you would like to use hard disks under Linux which were partitioned under the Atari OS. +config FIT_PARTITION + bool "Flattened-Image-Tree (FIT) partition support" if PARTITION_ADVANCED + default n + help + Say Y here if your system needs to mount the filesystem part of + a Flattened-Image-Tree (FIT) image commonly used with Das U-Boot. + config IBM_PARTITION bool "IBM disk label and partition support" depends on PARTITION_ADVANCED && S390 --- a/block/partitions/Makefile +++ b/block/partitions/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_ACORN_PARTITION) += acorn.o obj-$(CONFIG_AMIGA_PARTITION) += amiga.o obj-$(CONFIG_ATARI_PARTITION) += atari.o obj-$(CONFIG_AIX_PARTITION) += aix.o +obj-$(CONFIG_FIT_PARTITION) += fit.o obj-$(CONFIG_CMDLINE_PARTITION) += cmdline.o obj-$(CONFIG_MAC_PARTITION) += mac.o obj-$(CONFIG_LDM_PARTITION) += ldm.o --- a/drivers/mtd/ubi/block.c +++ b/drivers/mtd/ubi/block.c @@ -396,7 +396,7 @@ int ubiblock_create(struct ubi_volume_in dev->leb_size = vi->usable_leb_size; /* Initialize the gendisk of this ubiblock device */ - gd = alloc_disk(1); + gd = alloc_disk(0); if (!gd) { pr_err("UBI: block: alloc_disk failed\n"); ret = -ENODEV; @@ -413,6 +413,7 @@ int ubiblock_create(struct ubi_volume_in goto out_put_disk; } gd->private_data = dev; + gd->flags |= GENHD_FL_EXT_DEVT; sprintf(gd->disk_name, "ubiblock%d_%d", dev->ubi_num, dev->vol_id); set_capacity(gd, disk_capacity); dev->gd = gd; --- a/block/partition-generic.c +++ b/block/partition-generic.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "partitions/check.h" @@ -634,6 +635,8 @@ rescan: if (state->parts[p].flags & ADDPART_FLAG_RAID) md_autodetect_dev(part_to_dev(part)->devt); #endif + if ((state->parts[p].flags & ADDPART_FLAG_ROOTDEV) && ROOT_DEV == 0) + ROOT_DEV = part_to_dev(part)->devt; } free_partitions(state); return 0; --- a/block/partitions/check.c +++ b/block/partitions/check.c @@ -33,6 +33,7 @@ #include "ibm.h" #include "ultrix.h" #include "efi.h" +#include "fit.h" #include "karma.h" #include "sysv68.h" #include "cmdline.h" @@ -73,6 +74,9 @@ static int (*check_part[])(struct parsed #ifdef CONFIG_EFI_PARTITION efi_partition, /* this must come before msdos */ #endif +#ifdef CONFIG_FIT_PARTITION + fit_partition, +#endif #ifdef CONFIG_SGI_PARTITION sgi_partition, #endif --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -614,6 +614,7 @@ struct unixware_disklabel { #define ADDPART_FLAG_NONE 0 #define ADDPART_FLAG_RAID 1 #define ADDPART_FLAG_WHOLEDISK 2 +#define ADDPART_FLAG_ROOTDEV 4 extern int blk_alloc_devt(struct hd_struct *part, dev_t *devt); extern void blk_free_devt(dev_t devt); --- /dev/null +++ b/block/partitions/fit.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +int fit_partition(struct parsed_partitions *);