In read-only mode is skipped auto-resize. For pre-build images ready for
auto-resize there can be reserved more PEBs as whole size of pre-build
image. In read-only we do not do any write operation therefore this would
allow to use read-only UBI volume which is not auto-resized yet.

Signed-off-by: Pali Rohár <[email protected]>
---
 drivers/mtd/ubi/vtbl.c |   14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c
index 263743e..1d708c5 100644
--- a/drivers/mtd/ubi/vtbl.c
+++ b/drivers/mtd/ubi/vtbl.c
@@ -240,8 +240,10 @@ static int vtbl_check(const struct ubi_device *ubi,
                if (reserved_pebs > ubi->good_peb_count) {
                        ubi_err(ubi, "too large reserved_pebs %d, good PEBs %d",
                                reserved_pebs, ubi->good_peb_count);
-                       err = 9;
-                       goto bad;
+                       if (!ubi->ro_mode) {
+                               err = 9;
+                               goto bad;
+                       }
                }
 
                if (name_len > UBI_VOL_NAME_MAX) {
@@ -652,10 +654,12 @@ static int init_volumes(struct ubi_device *ubi,
                if (ubi->corr_peb_count)
                        ubi_err(ubi, "%d PEBs are corrupted and not used",
                                ubi->corr_peb_count);
-               return -ENOSPC;
+               if (!ubi->ro_mode)
+                       return -ENOSPC;
+       } else {
+               ubi->rsvd_pebs += reserved_pebs;
+               ubi->avail_pebs -= reserved_pebs;
        }
-       ubi->rsvd_pebs += reserved_pebs;
-       ubi->avail_pebs -= reserved_pebs;
 
        return 0;
 }
-- 
1.7.9.5

Reply via email to