Skip to content

Commit

Permalink
dm: use queue_limits_set
Browse files Browse the repository at this point in the history
Use queue_limits_set which validates the limits and takes care of
updating the readahead settings instead of directly assigning them to
the queue.  For that make sure all limits are actually updated before
the assignment.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
  • Loading branch information
Christoph Hellwig authored and Mike Snitzer committed Apr 23, 2024
1 parent 7560680 commit 1c0e720
Showing 1 changed file with 12 additions and 15 deletions.
27 changes: 12 additions & 15 deletions drivers/md/dm-table.c
Original file line number Diff line number Diff line change
Expand Up @@ -1963,26 +1963,27 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
bool wc = false, fua = false;
int r;

/*
* Copy table's limits to the DM device's request_queue
*/
q->limits = *limits;

if (dm_table_supports_nowait(t))
blk_queue_flag_set(QUEUE_FLAG_NOWAIT, q);
else
blk_queue_flag_clear(QUEUE_FLAG_NOWAIT, q);

if (!dm_table_supports_discards(t)) {
q->limits.max_discard_sectors = 0;
q->limits.max_hw_discard_sectors = 0;
q->limits.discard_granularity = 0;
q->limits.discard_alignment = 0;
q->limits.discard_misaligned = 0;
limits->max_hw_discard_sectors = 0;
limits->discard_granularity = 0;
limits->discard_alignment = 0;
limits->discard_misaligned = 0;
}

if (!dm_table_supports_write_zeroes(t))
limits->max_write_zeroes_sectors = 0;

if (!dm_table_supports_secure_erase(t))
q->limits.max_secure_erase_sectors = 0;
limits->max_secure_erase_sectors = 0;

r = queue_limits_set(q, limits);
if (r)
return r;

if (dm_table_supports_flush(t, (1UL << QUEUE_FLAG_WC))) {
wc = true;
Expand All @@ -2007,9 +2008,6 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
else
blk_queue_flag_set(QUEUE_FLAG_NONROT, q);

if (!dm_table_supports_write_zeroes(t))
q->limits.max_write_zeroes_sectors = 0;

dm_table_verify_integrity(t);

/*
Expand Down Expand Up @@ -2047,7 +2045,6 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
}

dm_update_crypto_profile(q, t);
disk_update_readahead(t->md->disk);

/*
* Check for request-based device is left to
Expand Down

0 comments on commit 1c0e720

Please sign in to comment.