diff -Naur linux-2.6.30.4-orig/drivers/mtd/ubi/upd.c linux-2.6.30.4-new/drivers/mtd/ubi/upd.c
--- linux-2.6.30.4-orig/drivers/mtd/ubi/upd.c	2009-07-30 15:34:47.000000000 -0700
+++ linux-2.6.30.4-new/drivers/mtd/ubi/upd.c	2010-03-08 13:39:13.892815000 -0800
@@ -147,12 +147,14 @@
 	}
 
 	if (bytes == 0) {
+		err = ubi_wl_flush(ubi);
+		if (err)
+			return err;
+
 		err = clear_update_marker(ubi, vol, 0);
 		if (err)
 			return err;
-		err = ubi_wl_flush(ubi);
-		if (!err)
-			vol->updating = 0;
+		vol->updating = 0;
 	}
 
 	vol->upd_buf = vmalloc(ubi->leb_size);
@@ -362,16 +364,16 @@
 
 	ubi_assert(vol->upd_received <= vol->upd_bytes);
 	if (vol->upd_received == vol->upd_bytes) {
+		err = ubi_wl_flush(ubi);
+		if (err)
+			return err;
 		/* The update is finished, clear the update marker */
 		err = clear_update_marker(ubi, vol, vol->upd_bytes);
 		if (err)
 			return err;
-		err = ubi_wl_flush(ubi);
-		if (err == 0) {
-			vol->updating = 0;
-			err = to_write;
-			vfree(vol->upd_buf);
-		}
+		vol->updating = 0;
+		err = to_write;
+		vfree(vol->upd_buf);
 	}
 
 	return err;
diff -Naur linux-2.6.30.4-orig/drivers/mtd/ubi/vtbl.c linux-2.6.30.4-new/drivers/mtd/ubi/vtbl.c
--- linux-2.6.30.4-orig/drivers/mtd/ubi/vtbl.c	2009-07-30 15:34:47.000000000 -0700
+++ linux-2.6.30.4-new/drivers/mtd/ubi/vtbl.c	2010-03-08 13:28:28.523862000 -0800
@@ -566,6 +566,7 @@
 		vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs);
 		vol->alignment = be32_to_cpu(vtbl[i].alignment);
 		vol->data_pad = be32_to_cpu(vtbl[i].data_pad);
+		vol->upd_marker = vtbl[i].upd_marker;
 		vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ?
 					UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME;
 		vol->name_len = be16_to_cpu(vtbl[i].name_len);
