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>
Reviewed-by: Mike Snitzer <snitzer@kernel.org>
Link: https://lore.kernel.org/r/20240228225653.947152-4-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Christoph Hellwig authored and axboe committed Mar 1, 2024
1 parent c1373f1 commit 8e0ef41
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 16 deletions.
2 changes: 1 addition & 1 deletion block/blk-settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ int queue_limits_commit_update(struct request_queue *q,
EXPORT_SYMBOL_GPL(queue_limits_commit_update);

/**
* queue_limits_commit_set - apply queue limits to queue
* queue_limits_set - apply queue limits to queue
* @q: queue to update
* @lim: limits to apply
*
Expand Down
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 8e0ef41

Please sign in to comment.