.. | .. |
---|
136 | 136 | if (!s) { |
---|
137 | 137 | JFFS2_WARNING("Can't allocate memory for summary\n"); |
---|
138 | 138 | ret = -ENOMEM; |
---|
139 | | - goto out; |
---|
| 139 | + goto out_buf; |
---|
140 | 140 | } |
---|
141 | 141 | } |
---|
142 | 142 | |
---|
.. | .. |
---|
261 | 261 | } |
---|
262 | 262 | #endif |
---|
263 | 263 | if (c->nr_erasing_blocks) { |
---|
264 | | - if ( !c->used_size && ((c->nr_free_blocks+empty_blocks+bad_blocks)!= c->nr_blocks || bad_blocks == c->nr_blocks) ) { |
---|
| 264 | + if (!c->used_size && !c->unchecked_size && |
---|
| 265 | + ((c->nr_free_blocks+empty_blocks+bad_blocks) != c->nr_blocks || bad_blocks == c->nr_blocks)) { |
---|
265 | 266 | pr_notice("Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes\n"); |
---|
266 | 267 | pr_notice("empty_blocks %d, bad_blocks %d, c->nr_blocks %d\n", |
---|
267 | 268 | empty_blocks, bad_blocks, c->nr_blocks); |
---|
.. | .. |
---|
274 | 275 | } |
---|
275 | 276 | ret = 0; |
---|
276 | 277 | out: |
---|
| 278 | + jffs2_sum_reset_collected(s); |
---|
| 279 | + kfree(s); |
---|
| 280 | + out_buf: |
---|
277 | 281 | if (buf_size) |
---|
278 | 282 | kfree(flashbuf); |
---|
279 | 283 | #ifndef __ECOS |
---|
280 | 284 | else |
---|
281 | 285 | mtd_unpoint(c->mtd, 0, c->mtd->size); |
---|
282 | 286 | #endif |
---|
283 | | - kfree(s); |
---|
284 | 287 | return ret; |
---|
285 | 288 | } |
---|
286 | 289 | |
---|
.. | .. |
---|
527 | 530 | err = jffs2_fill_scan_buf(c, sumptr, |
---|
528 | 531 | jeb->offset + c->sector_size - sumlen, |
---|
529 | 532 | sumlen - buf_len); |
---|
530 | | - if (err) |
---|
| 533 | + if (err) { |
---|
| 534 | + if (sumlen > buf_size) |
---|
| 535 | + kfree(sumptr); |
---|
531 | 536 | return err; |
---|
| 537 | + } |
---|
532 | 538 | } |
---|
533 | 539 | } |
---|
534 | 540 | |
---|