summaryrefslogtreecommitdiff
path: root/drivers/mtd/ubi
diff options
context:
space:
mode:
authorHolger Brunck <holger.brunck@keymile.com>2011-10-10 13:08:19 +0200
committerStefan Roese <sr@denx.de>2011-10-12 11:36:05 +0200
commitd63894654df72b010de2abb4b3f07d0d755f65b6 (patch)
treefa28dcd2b07e3d8d3e992fd621cf59eab9477596 /drivers/mtd/ubi
parent349a8d5e56db4c0b199123d31ff5c0be67a39a42 (diff)
downloadu-boot-imx-d63894654df72b010de2abb4b3f07d0d755f65b6.zip
u-boot-imx-d63894654df72b010de2abb4b3f07d0d755f65b6.tar.gz
u-boot-imx-d63894654df72b010de2abb4b3f07d0d755f65b6.tar.bz2
UBI: init eba tables before wl when attaching a device
This fixes that u-boot gets stuck when a bitflip was detected during "ubi part <ubi_device>". If a bitflip was detected UBI tries to copy the PEB to a different place. This needs that the eba table are initialized, but this was done after the wear levelling worker detects the bitflip. So changes the initialisation of these two tasks in u-boot. This is a u-boot specific patch and not needed in the linux layer, because due to commit 1b1f9a9d00447d UBI: Ensure that "background thread" operations are really executed we schedule these tasks in place and not as in linux after the inital task which schedule this new task is finished. Signed-off-by: Holger Brunck <holger.brunck@keymile.com> cc: Stefan Roese <sr@denx.de> Signed-off-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'drivers/mtd/ubi')
-rw-r--r--drivers/mtd/ubi/build.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 3ea0e6c..d144ac2 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -476,21 +476,21 @@ static int attach_by_scanning(struct ubi_device *ubi)
if (err)
goto out_si;
- err = ubi_wl_init_scan(ubi, si);
- if (err)
- goto out_vtbl;
-
err = ubi_eba_init_scan(ubi, si);
if (err)
goto out_wl;
+ err = ubi_wl_init_scan(ubi, si);
+ if (err)
+ goto out_vtbl;
+
ubi_scan_destroy_si(si);
return 0;
-out_wl:
- ubi_wl_close(ubi);
out_vtbl:
vfree(ubi->vtbl);
+out_wl:
+ ubi_wl_close(ubi);
out_si:
ubi_scan_destroy_si(si);
return err;