diff options
| -rw-r--r-- | drivers/mtd/ubi/upd.c | 10 |
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; |
