UBI: bugfix: allocate mandatory EBs first
Subsystems (2)
PATCH 1/1 UBI: bugfix: allocate mandatory EBs first
Linus,
please, apply the below UBI bugfix. The patch is quite trivial and fixes an unpleasant UBI bug when it cannot attach an MTD device because it first reserves the bad block handling pool (not mandatory), and then tries to reserve a mandatory PEB. It should be vice versa.
From: Artem Bityutskiy <[email protected]>
Subject: [PATCH] UBI: bugfix: allocate mandatory EBs first
First allocate the necessary eraseblocks, then the optional ones. Otherwise it allocates all PEBs for bad EB handling, and fails on then following EBA LEB allocation.
Reported-by Adrian Hunter <[email protected]>
Signed-off-by Artem Bityutskiy <[email protected]>
--- drivers/mtd/ubi/eba.c | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-)
drivers/mtd/ubi/eba.c +9 -9
@@ -1168,6 +1168,15 @@ int ubi_eba_init_scan(struct ubi_device *ubi, struct ubi_scan_info *si) } } +if (ubi->avail_pebs <EBA_RESERVED_PEBS ) { +ubi_err ("no enough physical eraseblocks (%d, need %d)" , + ubi->avail_pebs,EBA_RESERVED_PEBS ); + err = -ENOSPC ; + goto out_free; + } + ubi->avail_pebs -=EBA_RESERVED_PEBS ; + ubi->rsvd_pebs +=EBA_RESERVED_PEBS ; +if (ubi->bad_allowed) {ubi_calculate_reserved (ubi);
@@ -1184,15 +1193,6 @@ int ubi_eba_init_scan(struct ubi_device *ubi, struct ubi_scan_info *si) ubi->rsvd_pebs += ubi->beb_rsvd_pebs; } -if (ubi->avail_pebs <EBA_RESERVED_PEBS ) { -ubi_err ("no enough physical eraseblocks (%d, need %d)" , - ubi->avail_pebs,EBA_RESERVED_PEBS ); - err = -ENOSPC ; - goto out_free; - } - ubi->avail_pebs -=EBA_RESERVED_PEBS ; - ubi->rsvd_pebs +=EBA_RESERVED_PEBS ; -dbg_eba ("EBA unit is initialized" );return 0 ;
Signature · 1 line
1.5.2.4