diff options
author | Mikulas Patocka <mpatocka@redhat.com> | 2023-04-04 17:22:10 +0200 |
---|---|---|
committer | Mike Snitzer <snitzer@kernel.org> | 2023-04-04 19:30:17 +0200 |
commit | b6bcb84446810df0c9364ee6e23e07866316beaf (patch) | |
tree | 8f0efcea0b73cfc3686d9ed06463ca3c71c3d3d0 /drivers/md | |
parent | dm zero: add discard support (diff) | |
download | linux-b6bcb84446810df0c9364ee6e23e07866316beaf.tar.xz linux-b6bcb84446810df0c9364ee6e23e07866316beaf.zip |
dm error: add discard support
Add io_err_io_hints() and set discard limits so that the zero target
advertises support for discards.
The error target will return -EIO for discards.
This is useful when the user combines dm-error with other
discard-supporting targets in the same table; without dm-error
support, discards would be disabled for the whole combined device.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Tested-by: Milan Broz <gmazyland@gmail.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/dm-target.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/md/dm-target.c b/drivers/md/dm-target.c index 26ea22b1a0d7..97a75f3eed93 100644 --- a/drivers/md/dm-target.c +++ b/drivers/md/dm-target.c @@ -119,6 +119,7 @@ static int io_err_ctr(struct dm_target *tt, unsigned int argc, char **args) * Return error for discards instead of -EOPNOTSUPP */ tt->num_discard_bios = 1; + tt->discards_supported = true; return 0; } @@ -145,6 +146,13 @@ static void io_err_release_clone_rq(struct request *clone, { } +static void io_err_io_hints(struct dm_target *ti, struct queue_limits *limits) +{ + limits->max_discard_sectors = UINT_MAX; + limits->max_hw_discard_sectors = UINT_MAX; + limits->discard_granularity = 512; +} + static long io_err_dax_direct_access(struct dm_target *ti, pgoff_t pgoff, long nr_pages, enum dax_access_mode mode, void **kaddr, pfn_t *pfn) @@ -154,13 +162,14 @@ static long io_err_dax_direct_access(struct dm_target *ti, pgoff_t pgoff, static struct target_type error_target = { .name = "error", - .version = {1, 5, 0}, + .version = {1, 6, 0}, .features = DM_TARGET_WILDCARD, .ctr = io_err_ctr, .dtr = io_err_dtr, .map = io_err_map, .clone_and_map_rq = io_err_clone_and_map_rq, .release_clone_rq = io_err_release_clone_rq, + .io_hints = io_err_io_hints, .direct_access = io_err_dax_direct_access, }; |