Skip to content

Commit 61697a6

Browse files
committed
dm: eliminate 'split_discard_bios' flag from DM target interface
There is no need to have DM core split discards on behalf of a DM target now that blk_queue_split() handles splitting discards based on the queue_limits. A DM target just needs to set max_discard_sectors, discard_granularity, etc, in queue_limits. Signed-off-by: Mike Snitzer <[email protected]>
1 parent 568c73a commit 61697a6

File tree

7 files changed

+17
-35
lines changed

7 files changed

+17
-35
lines changed

drivers/md/dm-cache-target.c

-1
Original file line numberDiff line numberDiff line change
@@ -2496,7 +2496,6 @@ static int cache_create(struct cache_args *ca, struct cache **result)
24962496

24972497
ti->num_discard_bios = 1;
24982498
ti->discards_supported = true;
2499-
ti->split_discard_bios = false;
25002499

25012500
ti->per_io_data_size = sizeof(struct per_bio_data);
25022501

drivers/md/dm-raid.c

+9-5
Original file line numberDiff line numberDiff line change
@@ -2986,11 +2986,6 @@ static void configure_discard_support(struct raid_set *rs)
29862986
}
29872987
}
29882988

2989-
/*
2990-
* RAID1 and RAID10 personalities require bio splitting,
2991-
* RAID0/4/5/6 don't and process large discard bios properly.
2992-
*/
2993-
ti->split_discard_bios = !!(rs_is_raid1(rs) || rs_is_raid10(rs));
29942989
ti->num_discard_bios = 1;
29952990
}
29962991

@@ -3747,6 +3742,15 @@ static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)
37473742

37483743
blk_limits_io_min(limits, chunk_size);
37493744
blk_limits_io_opt(limits, chunk_size * mddev_data_stripes(rs));
3745+
3746+
/*
3747+
* RAID1 and RAID10 personalities require bio splitting,
3748+
* RAID0/4/5/6 don't and process large discard bios properly.
3749+
*/
3750+
if (rs_is_raid1(rs) || rs_is_raid10(rs)) {
3751+
limits->discard_granularity = chunk_size;
3752+
limits->max_discard_sectors = chunk_size;
3753+
}
37503754
}
37513755

37523756
static void raid_postsuspend(struct dm_target *ti)

drivers/md/dm-thin.c

-1
Original file line numberDiff line numberDiff line change
@@ -4227,7 +4227,6 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)
42274227
if (tc->pool->pf.discard_enabled) {
42284228
ti->discards_supported = true;
42294229
ti->num_discard_bios = 1;
4230-
ti->split_discard_bios = false;
42314230
}
42324231

42334232
mutex_unlock(&dm_thin_pool_table.mutex);

drivers/md/dm-zoned-target.c

-1
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,6 @@ static int dmz_ctr(struct dm_target *ti, unsigned int argc, char **argv)
727727
ti->per_io_data_size = sizeof(struct dmz_bioctx);
728728
ti->flush_supported = true;
729729
ti->discards_supported = true;
730-
ti->split_discard_bios = true;
731730

732731
/* The exposed capacity is the number of chunks that can be mapped */
733732
ti->len = (sector_t)dmz_nr_chunks(dmz->metadata) << dev->zone_nr_sectors_shift;

drivers/md/dm.c

+6-19
Original file line numberDiff line numberDiff line change
@@ -1478,17 +1478,10 @@ static unsigned get_num_write_zeroes_bios(struct dm_target *ti)
14781478
return ti->num_write_zeroes_bios;
14791479
}
14801480

1481-
typedef bool (*is_split_required_fn)(struct dm_target *ti);
1482-
1483-
static bool is_split_required_for_discard(struct dm_target *ti)
1484-
{
1485-
return ti->split_discard_bios;
1486-
}
1487-
14881481
static int __send_changing_extent_only(struct clone_info *ci, struct dm_target *ti,
1489-
unsigned num_bios, bool is_split_required)
1482+
unsigned num_bios)
14901483
{
1491-
unsigned len;
1484+
unsigned len = ci->sector_count;
14921485

14931486
/*
14941487
* Even though the device advertised support for this type of
@@ -1499,11 +1492,6 @@ static int __send_changing_extent_only(struct clone_info *ci, struct dm_target *
14991492
if (!num_bios)
15001493
return -EOPNOTSUPP;
15011494

1502-
if (!is_split_required)
1503-
len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti));
1504-
else
1505-
len = min((sector_t)ci->sector_count, max_io_len(ci->sector, ti));
1506-
15071495
__send_duplicate_bios(ci, ti, num_bios, &len);
15081496

15091497
ci->sector += len;
@@ -1514,23 +1502,22 @@ static int __send_changing_extent_only(struct clone_info *ci, struct dm_target *
15141502

15151503
static int __send_discard(struct clone_info *ci, struct dm_target *ti)
15161504
{
1517-
return __send_changing_extent_only(ci, ti, get_num_discard_bios(ti),
1518-
is_split_required_for_discard(ti));
1505+
return __send_changing_extent_only(ci, ti, get_num_discard_bios(ti));
15191506
}
15201507

15211508
static int __send_secure_erase(struct clone_info *ci, struct dm_target *ti)
15221509
{
1523-
return __send_changing_extent_only(ci, ti, get_num_secure_erase_bios(ti), false);
1510+
return __send_changing_extent_only(ci, ti, get_num_secure_erase_bios(ti));
15241511
}
15251512

15261513
static int __send_write_same(struct clone_info *ci, struct dm_target *ti)
15271514
{
1528-
return __send_changing_extent_only(ci, ti, get_num_write_same_bios(ti), false);
1515+
return __send_changing_extent_only(ci, ti, get_num_write_same_bios(ti));
15291516
}
15301517

15311518
static int __send_write_zeroes(struct clone_info *ci, struct dm_target *ti)
15321519
{
1533-
return __send_changing_extent_only(ci, ti, get_num_write_zeroes_bios(ti), false);
1520+
return __send_changing_extent_only(ci, ti, get_num_write_zeroes_bios(ti));
15341521
}
15351522

15361523
static bool is_abnormal_io(struct bio *bio)

include/linux/device-mapper.h

-6
Original file line numberDiff line numberDiff line change
@@ -315,12 +315,6 @@ struct dm_target {
315315
* whether or not its underlying devices have support.
316316
*/
317317
bool discards_supported:1;
318-
319-
/*
320-
* Set if the target required discard bios to be split
321-
* on max_io_len boundary.
322-
*/
323-
bool split_discard_bios:1;
324318
};
325319

326320
/* Each target can link one of these into the table */

include/uapi/linux/dm-ioctl.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -270,9 +270,9 @@ enum {
270270
#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
271271

272272
#define DM_VERSION_MAJOR 4
273-
#define DM_VERSION_MINOR 39
273+
#define DM_VERSION_MINOR 40
274274
#define DM_VERSION_PATCHLEVEL 0
275-
#define DM_VERSION_EXTRA "-ioctl (2018-04-03)"
275+
#define DM_VERSION_EXTRA "-ioctl (2019-01-18)"
276276

277277
/* Status bits */
278278
#define DM_READONLY_FLAG (1 << 0) /* In/Out */

0 commit comments

Comments
 (0)