diff options
| author | Tom Rini <[email protected]> | 2026-02-04 10:31:02 -0600 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2026-02-04 10:31:02 -0600 |
| commit | e7a21a985da632fcaaed1cf7b90f6c025fcb389f (patch) | |
| tree | c0fc6d85e7760d79c00ddca0148ef25d53674abb | |
| parent | eb1562cc3e4c5130c76db1c1ea57156322362a7c (diff) | |
| parent | b06a1785b2bbe489a634e3158f82f93491a84328 (diff) | |
Merge patch series "part: fix partition searching"
Mikhail Kshevetskiy <[email protected]> says:
It was noted that a GPT partition with the maximum available partition
number (ex: /dev/mmcblk128) can't be read/write from U-Boot using
read/write commands. Futher investigation shows that the problem is
deeper.
This set of patches fixes uncovered issues.
Link: https://lore.kernel.org/r/[email protected]
| -rw-r--r-- | cmd/gpt.c | 4 | ||||
| -rw-r--r-- | disk/part.c | 4 | ||||
| -rw-r--r-- | drivers/mtd/mtdpart.c | 7 |
3 files changed, 8 insertions, 7 deletions
diff --git a/cmd/gpt.c b/cmd/gpt.c index 84221881c39..205f696c807 100644 --- a/cmd/gpt.c +++ b/cmd/gpt.c @@ -723,7 +723,7 @@ static int gpt_enumerate(struct blk_desc *desc) if (part_drv->test(desc)) continue; - for (i = 1; i < part_drv->max_entries; i++) { + for (i = 1; i <= part_drv->max_entries; i++) { ret = part_driver_get_info(part_drv, desc, i, &pinfo); if (ret) continue; @@ -819,7 +819,7 @@ static int gpt_setenv(struct blk_desc *desc, const char *name) struct disk_partition pinfo; int i; - for (i = 1; i < part_drv->max_entries; i++) { + for (i = 1; i <= part_drv->max_entries; i++) { ret = part_driver_get_info(part_drv, desc, i, &pinfo); if (ret) continue; diff --git a/disk/part.c b/disk/part.c index 49a0fca6b89..4923dc44593 100644 --- a/disk/part.c +++ b/disk/part.c @@ -674,7 +674,7 @@ int part_get_info_by_name(struct blk_desc *desc, const char *name, if (!part_drv) return -1; - for (i = 1; i < part_drv->max_entries; i++) { + for (i = 1; i <= part_drv->max_entries; i++) { ret = part_driver_get_info(part_drv, desc, i, info); if (ret != 0) { /* -ENOSYS means no ->get_info method. */ @@ -709,7 +709,7 @@ int part_get_info_by_uuid(struct blk_desc *desc, const char *uuid, if (!part_drv) return -1; - for (i = 1; i < part_drv->max_entries; i++) { + for (i = 1; i <= part_drv->max_entries; i++) { ret = part_driver_get_info(part_drv, desc, i, info); if (ret != 0) { /* -ENOSYS means no ->get_info method. */ diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 842d3e7274e..f3b7f1ee13c 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -1061,13 +1061,13 @@ EXPORT_SYMBOL_GPL(mtd_get_device_size); static struct mtd_info *mtd_get_partition_by_index(struct mtd_info *mtd, int index) { struct mtd_info *part; - int i = 0; + int i = 1; + /* partition indexes starts from 1 */ list_for_each_entry(part, &mtd->partitions, node) if (i++ == index) return part; - debug("Partition with idx=%d not found on MTD device %s\n", index, mtd->name); return NULL; } @@ -1084,7 +1084,8 @@ static int __maybe_unused part_get_info_mtd(struct blk_desc *dev_desc, int part_ part = mtd_get_partition_by_index(master, part_idx); if (!part) { - debug("Failed to find partition with idx=%d\n", part_idx); + debug("Failed to find partition with idx=%d on MTD device %s\n", + part_idx, master->name); return -EINVAL; } |
