[U-Boot] [PATCH] tools: env: handle corrupted ubi volumes during sanity check
Martin Hundebøll
martin at geanix.com
Tue Nov 12 19:02:23 UTC 2019
A partially written ubi volume is marked as such by the kernel. Such a
mark causes the initial ubi sanity check to fail instead of falling back
to the redundant environment.
Fix this by special casing the EBADF return code from the UBI_IOCEBISMAP
ioctl, as this is only ever returned in case of a partially written
volume. The CRC checking will decide which environment to use anyways.
Signed-off-by: Martin Hundebøll <martin at geanix.com>
---
tools/env/fw_env.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index cfada0ee11..f7904ae036 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -1608,7 +1608,13 @@ static int check_device_config(int dev)
if (IS_UBI(dev)) {
rc = ioctl(fd, UBI_IOCEBISMAP, &lnum);
- if (rc < 0) {
+ if (rc < 0 && errno == EBADF) {
+ /* EBADF here means we are dealing with a partially
+ * written UBI volume, Leave it for now to allow the
+ * use of the redundant env. CRC checking will decide
+ * which to use */
+ rc = 0;
+ } else if (rc < 0) {
fprintf(stderr, "Cannot get UBI information for %s\n",
DEVNAME(dev));
goto err;
--
2.24.0
More information about the U-Boot
mailing list