diff options
| -rw-r--r-- | drivers/md/md-bitmap.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c index a60e46529d9f..bb45c0ccc1bf 100644 --- a/drivers/md/md-bitmap.c +++ b/drivers/md/md-bitmap.c | |||
| @@ -2162,6 +2162,7 @@ int bitmap_resize(struct bitmap *bitmap, sector_t blocks, | |||
| 2162 | for (k = 0; k < page; k++) { | 2162 | for (k = 0; k < page; k++) { |
| 2163 | kfree(new_bp[k].map); | 2163 | kfree(new_bp[k].map); |
| 2164 | } | 2164 | } |
| 2165 | kfree(new_bp); | ||
| 2165 | 2166 | ||
| 2166 | /* restore some fields from old_counts */ | 2167 | /* restore some fields from old_counts */ |
| 2167 | bitmap->counts.bp = old_counts.bp; | 2168 | bitmap->counts.bp = old_counts.bp; |
| @@ -2212,6 +2213,14 @@ int bitmap_resize(struct bitmap *bitmap, sector_t blocks, | |||
| 2212 | block += old_blocks; | 2213 | block += old_blocks; |
| 2213 | } | 2214 | } |
| 2214 | 2215 | ||
| 2216 | if (bitmap->counts.bp != old_counts.bp) { | ||
| 2217 | unsigned long k; | ||
| 2218 | for (k = 0; k < old_counts.pages; k++) | ||
| 2219 | if (!old_counts.bp[k].hijacked) | ||
| 2220 | kfree(old_counts.bp[k].map); | ||
| 2221 | kfree(old_counts.bp); | ||
| 2222 | } | ||
| 2223 | |||
| 2215 | if (!init) { | 2224 | if (!init) { |
| 2216 | int i; | 2225 | int i; |
| 2217 | while (block < (chunks << chunkshift)) { | 2226 | while (block < (chunks << chunkshift)) { |
