aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/ubi/upd.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c
index 74fdc40c8627..c1d7b880c795 100644
--- a/drivers/mtd/ubi/upd.c
+++ b/drivers/mtd/ubi/upd.c
@@ -147,12 +147,14 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,
147 } 147 }
148 148
149 if (bytes == 0) { 149 if (bytes == 0) {
150 err = ubi_wl_flush(ubi);
151 if (err)
152 return err;
153
150 err = clear_update_marker(ubi, vol, 0); 154 err = clear_update_marker(ubi, vol, 0);
151 if (err) 155 if (err)
152 return err; 156 return err;
153 err = ubi_wl_flush(ubi); 157 vol->updating = 0;
154 if (!err)
155 vol->updating = 0;
156 } 158 }
157 159
158 vol->upd_buf = vmalloc(ubi->leb_size); 160 vol->upd_buf = vmalloc(ubi->leb_size);
@@ -362,16 +364,16 @@ int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol,
362 364
363 ubi_assert(vol->upd_received <= vol->upd_bytes); 365 ubi_assert(vol->upd_received <= vol->upd_bytes);
364 if (vol->upd_received == vol->upd_bytes) { 366 if (vol->upd_received == vol->upd_bytes) {
367 err = ubi_wl_flush(ubi);
368 if (err)
369 return err;
365 /* The update is finished, clear the update marker */ 370 /* The update is finished, clear the update marker */
366 err = clear_update_marker(ubi, vol, vol->upd_bytes); 371 err = clear_update_marker(ubi, vol, vol->upd_bytes);
367 if (err) 372 if (err)
368 return err; 373 return err;
369 err = ubi_wl_flush(ubi); 374 vol->updating = 0;
370 if (err == 0) { 375 err = to_write;
371 vol->updating = 0; 376 vfree(vol->upd_buf);
372 err = to_write;
373 vfree(vol->upd_buf);
374 }
375 } 377 }
376 378
377 return err; 379 return err;