From fd127c8e5962158eb02104d5e41a029ee31967be Mon Sep 17 00:00:00 2001 From: David Owens Date: Fri, 20 Jul 2018 07:30:07 -0500 Subject: [PATCH] mtd: backport upstream bug fix A regression in the mtd package prevents non-consecutive ubi volume IDs from working properly. This change backported from upstream reverts the commit [0]. The issue was originally described on the mtd mailing list: http://lists.infradead.org/pipermail/linux-mtd/2018-June/081562.html [0] http://git.infradead.org/mtd-utils.git/commitdiff/dede98ffb706676309488d7cc660f569548d5930 Signed-off-by: David Owens Reviewed-by: Matt Weber Signed-off-by: Thomas Petazzoni --- ...ct-error-number-in-ubi_get_vol_info1.patch | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 package/mtd/0001-revert-return-correct-error-number-in-ubi_get_vol_info1.patch diff --git a/package/mtd/0001-revert-return-correct-error-number-in-ubi_get_vol_info1.patch b/package/mtd/0001-revert-return-correct-error-number-in-ubi_get_vol_info1.patch new file mode 100644 index 0000000000..1fd4f7693b --- /dev/null +++ b/package/mtd/0001-revert-return-correct-error-number-in-ubi_get_vol_info1.patch @@ -0,0 +1,92 @@ +From 0f833ac73ad631248826386e2918d8571ecf0347 Mon Sep 17 00:00:00 2001 +From: David Oberhollenzer +Date: Sat, 9 Jun 2018 16:45:22 +0200 +Subject: [PATCH] Revert "Return correct error number in ubi_get_vol_info1" + +This reverts commit dede98ffb706676309488d7cc660f569548d5930. + +The original commit tried to fix a descrepancy between the implementation +and the documentation by making the implementation comply. + +When making the change, it was overlooked, that ubinfo and ubirename were +written against the implementation instead of the behaviour specified by +the documentation. So were further internal functions like +ubi_get_vol_info1_nm which further breaks ubirmvol. + +A report with an outline of a resulting problem can be read on +the mailing list: + +http://lists.infradead.org/pipermail/linux-mtd/2018-June/081562.html + +From the report: + +steps to reproduce: have mtd-utils 2.0.1 or 2.0.2 + +0. make a bunch of ubi volumes in sequential order + +ubimkvol /dev/ubi0 -s 64KiB -N test1 +ubimkvol /dev/ubi0 -s 64KiB -N test2 +ubimkvol /dev/ubi0 -s 64KiB -N test3 +ubimkvol /dev/ubi0 -s 64KiB -N test4 +.. + +1. delete the test1 volume, making a hole in the volume table + +ubirmvol /dev/ubi0 -N test1 + +2. try an affected tool (i.e. "ubirmvol /dev/ubi0 -N test4" ) + + |root at mr24:/# ubirmvol /dev/ubi0 -N test4 + |ubirmvol: error!: cannot find UBI volume "test4" + | error 19 (No such device) + +or "ubinfo -a" + + | root at mr24:/# ubinfo -a + | UBI version: 1 + | Count of UBI devices: 1 + | UBI control device major/minor: 10:59 + | Present UBI devices: ubi0 + | + | ubi0 + | Volumes count: 11 + | Logical eraseblock size: 15872 bytes, 15.5 KiB + | Total amount of logical eraseblocks: 1952 (30982144 bytes, 29.5 MiB) + | Amount of available logical eraseblocks: 75 (1190400 bytes, 1.1 MiB) + | Maximum count of volumes 92 + | Count of bad physical eraseblocks: 0 + | Count of reserved physical eraseblocks: 40 + | Current maximum erase counter value: 984 + | Minimum input/output unit size: 512 bytes + | Character device major/minor: 251:0 + | ubinfo: error!: libubi failed to probe volume 5 on ubi0 + | error 19 (No such device) + | Present volumes: 0, 1, 2, 3, 4root at mr24:/# + +Reported-by: Christian Lamparter +Signed-off-by: David Oberhollenzer +Signed-off-by: David Owens +--- + lib/libubi.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/lib/libubi.c b/lib/libubi.c +index b50e68a..978b433 100644 +--- a/lib/libubi.c ++++ b/lib/libubi.c +@@ -1240,11 +1240,8 @@ int ubi_get_vol_info1(libubi_t desc, int dev_num, int vol_id, + info->dev_num = dev_num; + info->vol_id = vol_id; + +- if (vol_get_major(lib, dev_num, vol_id, &info->major, &info->minor)) { +- if (errno == ENOENT) +- errno = ENODEV; ++ if (vol_get_major(lib, dev_num, vol_id, &info->major, &info->minor)) + return -1; +- } + + ret = vol_read_data(lib->vol_type, dev_num, vol_id, buf, 50); + if (ret < 0) +-- +2.14.4 + -- 2.30.2