]> www.infradead.org Git - mtd-utils.git/commitdiff
Revert "Return correct error number in ubi_get_vol_info1"
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>
Sat, 9 Jun 2018 14:45:22 +0000 (16:45 +0200)
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>
Sat, 9 Jun 2018 16:09:39 +0000 (18:09 +0200)
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>
lib/libubi.c

index b50e68a309a85239088452ad1318462cd9831e05..978b433e46975c005c3259762832369969573a9a 100644 (file)
@@ -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)