aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/ubi/upd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/ubi/upd.c')
-rw-r--r--drivers/mtd/ubi/upd.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c
index ec2c2dc1c1ca..2a1b6e037e1a 100644
--- a/drivers/mtd/ubi/upd.c
+++ b/drivers/mtd/ubi/upd.c
@@ -133,6 +133,10 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,
133 ubi_assert(!vol->updating && !vol->changing_leb); 133 ubi_assert(!vol->updating && !vol->changing_leb);
134 vol->updating = 1; 134 vol->updating = 1;
135 135
136 vol->upd_buf = vmalloc(ubi->leb_size);
137 if (!vol->upd_buf)
138 return -ENOMEM;
139
136 err = set_update_marker(ubi, vol); 140 err = set_update_marker(ubi, vol);
137 if (err) 141 if (err)
138 return err; 142 return err;
@@ -152,14 +156,12 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,
152 err = clear_update_marker(ubi, vol, 0); 156 err = clear_update_marker(ubi, vol, 0);
153 if (err) 157 if (err)
154 return err; 158 return err;
159
160 vfree(vol->upd_buf);
155 vol->updating = 0; 161 vol->updating = 0;
156 return 0; 162 return 0;
157 } 163 }
158 164
159 vol->upd_buf = vmalloc(ubi->leb_size);
160 if (!vol->upd_buf)
161 return -ENOMEM;
162
163 vol->upd_ebs = div_u64(bytes + vol->usable_leb_size - 1, 165 vol->upd_ebs = div_u64(bytes + vol->usable_leb_size - 1,
164 vol->usable_leb_size); 166 vol->usable_leb_size);
165 vol->upd_bytes = bytes; 167 vol->upd_bytes = bytes;