Commit fe7af2d3 authored by Alasdair G Kergon's avatar Alasdair G Kergon

dm: fix write same requests counting

When processing write same requests, fix dm to send the configured
number of WRITE SAME requests to the target rather than the number of
discards, which is not always the same.

Device-mapper WRITE SAME support was introduced by commit
23508a96 ("dm: add WRITE SAME support").
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
Acked-by: default avatarMike Snitzer <snitzer@redhat.com>
parent 0f640dca
...@@ -1188,6 +1188,7 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci, ...@@ -1188,6 +1188,7 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci,
{ {
struct dm_target *ti; struct dm_target *ti;
sector_t len; sector_t len;
unsigned num_requests;
do { do {
ti = dm_table_find_target(ci->map, ci->sector); ti = dm_table_find_target(ci->map, ci->sector);
...@@ -1200,7 +1201,8 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci, ...@@ -1200,7 +1201,8 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci,
* reconfiguration might also have changed that since the * reconfiguration might also have changed that since the
* check was performed. * check was performed.
*/ */
if (!get_num_requests || !get_num_requests(ti)) num_requests = get_num_requests ? get_num_requests(ti) : 0;
if (!num_requests)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (is_split_required && !is_split_required(ti)) if (is_split_required && !is_split_required(ti))
...@@ -1208,7 +1210,7 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci, ...@@ -1208,7 +1210,7 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci,
else else
len = min(ci->sector_count, max_io_len(ci->sector, ti)); len = min(ci->sector_count, max_io_len(ci->sector, ti));
__issue_target_requests(ci, ti, ti->num_discard_requests, len); __issue_target_requests(ci, ti, num_requests, len);
ci->sector += len; ci->sector += len;
} while (ci->sector_count -= len); } while (ci->sector_count -= len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment