aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-thin.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/dm-thin.c')
-rw-r--r--drivers/md/dm-thin.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index 17ad50daed08..28808e5ec0fd 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -1094,6 +1094,19 @@ static void process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
1094 return; 1094 return;
1095 } 1095 }
1096 1096
1097 /*
1098 * Increment the unmapped blocks. This prevents a race between the
1099 * passdown io and reallocation of freed blocks.
1100 */
1101 r = dm_pool_inc_data_range(pool->pmd, m->data_block, data_end);
1102 if (r) {
1103 metadata_operation_failed(pool, "dm_pool_inc_data_range", r);
1104 bio_io_error(m->bio);
1105 cell_defer_no_holder(tc, m->cell);
1106 mempool_free(m, pool->mapping_pool);
1107 return;
1108 }
1109
1097 discard_parent = bio_alloc(GFP_NOIO, 1); 1110 discard_parent = bio_alloc(GFP_NOIO, 1);
1098 if (!discard_parent) { 1111 if (!discard_parent) {
1099 DMWARN("%s: unable to allocate top level discard bio for passdown. Skipping passdown.", 1112 DMWARN("%s: unable to allocate top level discard bio for passdown. Skipping passdown.",
@@ -1114,19 +1127,6 @@ static void process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
1114 end_discard(&op, r); 1127 end_discard(&op, r);
1115 } 1128 }
1116 } 1129 }
1117
1118 /*
1119 * Increment the unmapped blocks. This prevents a race between the
1120 * passdown io and reallocation of freed blocks.
1121 */
1122 r = dm_pool_inc_data_range(pool->pmd, m->data_block, data_end);
1123 if (r) {
1124 metadata_operation_failed(pool, "dm_pool_inc_data_range", r);
1125 bio_io_error(m->bio);
1126 cell_defer_no_holder(tc, m->cell);
1127 mempool_free(m, pool->mapping_pool);
1128 return;
1129 }
1130} 1130}
1131 1131
1132static void process_prepared_discard_passdown_pt2(struct dm_thin_new_mapping *m) 1132static void process_prepared_discard_passdown_pt2(struct dm_thin_new_mapping *m)