forked from Minki/linux
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 <ext-adrian.hunter@nokia.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
parent
2362a53ec5
commit
94780d4de2
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user