| From 0f833ac73ad631248826386e2918d8571ecf0347 Mon Sep 17 00:00:00 2001 |
| From: David Oberhollenzer <david.oberhollenzer@sigma-star.at> |
| 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 <chunkeey@gmail.com> |
| Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at> |
| Signed-off-by: David Owens <david.owens@rockwellcollins.com> |
| --- |
| 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 |
| |