diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/md/dm-thin.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c index 213ae32a0fc4..301db0f45d3b 100644 --- a/drivers/md/dm-thin.c +++ b/drivers/md/dm-thin.c | |||
@@ -279,8 +279,10 @@ static void __cell_release(struct cell *cell, struct bio_list *inmates) | |||
279 | 279 | ||
280 | hlist_del(&cell->list); | 280 | hlist_del(&cell->list); |
281 | 281 | ||
282 | bio_list_add(inmates, cell->holder); | 282 | if (inmates) { |
283 | bio_list_merge(inmates, &cell->bios); | 283 | bio_list_add(inmates, cell->holder); |
284 | bio_list_merge(inmates, &cell->bios); | ||
285 | } | ||
284 | 286 | ||
285 | mempool_free(cell, prison->cell_pool); | 287 | mempool_free(cell, prison->cell_pool); |
286 | } | 288 | } |
@@ -303,9 +305,10 @@ static void cell_release(struct cell *cell, struct bio_list *bios) | |||
303 | */ | 305 | */ |
304 | static void __cell_release_singleton(struct cell *cell, struct bio *bio) | 306 | static void __cell_release_singleton(struct cell *cell, struct bio *bio) |
305 | { | 307 | { |
306 | hlist_del(&cell->list); | ||
307 | BUG_ON(cell->holder != bio); | 308 | BUG_ON(cell->holder != bio); |
308 | BUG_ON(!bio_list_empty(&cell->bios)); | 309 | BUG_ON(!bio_list_empty(&cell->bios)); |
310 | |||
311 | __cell_release(cell, NULL); | ||
309 | } | 312 | } |
310 | 313 | ||
311 | static void cell_release_singleton(struct cell *cell, struct bio *bio) | 314 | static void cell_release_singleton(struct cell *cell, struct bio *bio) |