|
@@ -1245,7 +1245,10 @@ static void process_discard(struct thin_c *tc, struct bio *bio)
|
|
|
|
|
|
cell_release_singleton(cell, bio);
|
|
|
cell_release_singleton(cell2, bio);
|
|
|
- remap_and_issue(tc, bio, lookup_result.block);
|
|
|
+ if ((!lookup_result.shared) && pool->pf.discard_passdown)
|
|
|
+ remap_and_issue(tc, bio, lookup_result.block);
|
|
|
+ else
|
|
|
+ bio_endio(bio, 0);
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -2628,6 +2631,7 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
|
|
if (tc->pool->pf.discard_enabled) {
|
|
|
ti->discards_supported = 1;
|
|
|
ti->num_discard_requests = 1;
|
|
|
+ ti->discard_zeroes_data_unsupported = 1;
|
|
|
}
|
|
|
|
|
|
dm_put(pool_md);
|