Skip to content

Commit 9bb410e

Browse files
author
Ming Lei
committed
block: add a queue_limits_commit_update_frozen helper
JIRA: https://issues.redhat.com/browse/RHEL-71345 Upstream Status: for-6.4/block commit aa427d7 Author: Christoph Hellwig <hch@lst.de> Date: Fri Jan 10 06:47:10 2025 +0100 block: add a queue_limits_commit_update_frozen helper Add a helper that freezes the queue, updates the queue limits and unfreezes the queue and convert all open coded versions of that to the new helper. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: John Garry <john.g.garry@oracle.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Nilay Shroff <nilay@linux.ibm.com> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Link: https://lore.kernel.org/r/20250110054726.1499538-3-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Ming Lei <ming.lei@redhat.com>
1 parent 456161e commit 9bb410e

File tree

7 files changed

+35
-28
lines changed

7 files changed

+35
-28
lines changed

block/blk-integrity.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,7 @@ static ssize_t flag_store(struct device *dev, const char *page, size_t count,
218218
else
219219
lim.integrity.flags |= flag;
220220

221-
blk_mq_freeze_queue(q);
222-
err = queue_limits_commit_update(q, &lim);
223-
blk_mq_unfreeze_queue(q);
221+
err = queue_limits_commit_update_frozen(q, &lim);
224222
if (err)
225223
return err;
226224
return count;

block/blk-settings.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,30 @@ int queue_limits_commit_update(struct request_queue *q,
420420
}
421421
EXPORT_SYMBOL_GPL(queue_limits_commit_update);
422422

423+
/**
424+
* queue_limits_commit_update_frozen - commit an atomic update of queue limits
425+
* @q: queue to update
426+
* @lim: limits to apply
427+
*
428+
* Apply the limits in @lim that were obtained from queue_limits_start_update()
429+
* and updated with the new values by the caller to @q. Freezes the queue
430+
* before the update and unfreezes it after.
431+
*
432+
* Returns 0 if successful, else a negative error code.
433+
*/
434+
int queue_limits_commit_update_frozen(struct request_queue *q,
435+
struct queue_limits *lim)
436+
{
437+
int ret;
438+
439+
blk_mq_freeze_queue(q);
440+
ret = queue_limits_commit_update(q, lim);
441+
blk_mq_unfreeze_queue(q);
442+
443+
return ret;
444+
}
445+
EXPORT_SYMBOL_GPL(queue_limits_commit_update_frozen);
446+
423447
/**
424448
* queue_limits_commit_set - apply queue limits to queue
425449
* @q: queue to update

block/blk-zoned.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,7 +1446,6 @@ static int disk_update_zone_resources(struct gendisk *disk,
14461446
unsigned int nr_seq_zones, nr_conv_zones;
14471447
unsigned int pool_size;
14481448
struct queue_limits lim;
1449-
int ret;
14501449

14511450
disk->nr_zones = args->nr_zones;
14521451
disk->zone_capacity = args->zone_capacity;
@@ -1497,11 +1496,7 @@ static int disk_update_zone_resources(struct gendisk *disk,
14971496
}
14981497

14991498
commit:
1500-
blk_mq_freeze_queue(q);
1501-
ret = queue_limits_commit_update(q, &lim);
1502-
blk_mq_unfreeze_queue(q);
1503-
1504-
return ret;
1499+
return queue_limits_commit_update_frozen(q, &lim);
15051500
}
15061501

15071502
static int blk_revalidate_conv_zone(struct blk_zone *zone, unsigned int idx,

drivers/block/virtio_blk.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,9 +1115,7 @@ cache_type_store(struct device *dev, struct device_attribute *attr,
11151115
lim.features |= BLK_FEAT_WRITE_CACHE;
11161116
else
11171117
lim.features &= ~BLK_FEAT_WRITE_CACHE;
1118-
blk_mq_freeze_queue(disk->queue);
1119-
i = queue_limits_commit_update(disk->queue, &lim);
1120-
blk_mq_unfreeze_queue(disk->queue);
1118+
i = queue_limits_commit_update_frozen(disk->queue, &lim);
11211119
if (i)
11221120
return i;
11231121
return count;

drivers/scsi/sd.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,8 @@ cache_type_store(struct device *dev, struct device_attribute *attr,
183183

184184
lim = queue_limits_start_update(sdkp->disk->queue);
185185
sd_set_flush_flag(sdkp, &lim);
186-
blk_mq_freeze_queue(sdkp->disk->queue);
187-
ret = queue_limits_commit_update(sdkp->disk->queue, &lim);
188-
blk_mq_unfreeze_queue(sdkp->disk->queue);
186+
ret = queue_limits_commit_update_frozen(sdkp->disk->queue,
187+
&lim);
189188
if (ret)
190189
return ret;
191190
return count;
@@ -489,9 +488,7 @@ provisioning_mode_store(struct device *dev, struct device_attribute *attr,
489488

490489
lim = queue_limits_start_update(sdkp->disk->queue);
491490
sd_config_discard(sdkp, &lim, mode);
492-
blk_mq_freeze_queue(sdkp->disk->queue);
493-
err = queue_limits_commit_update(sdkp->disk->queue, &lim);
494-
blk_mq_unfreeze_queue(sdkp->disk->queue);
491+
err = queue_limits_commit_update_frozen(sdkp->disk->queue, &lim);
495492
if (err)
496493
return err;
497494
return count;
@@ -600,9 +597,7 @@ max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
600597

601598
lim = queue_limits_start_update(sdkp->disk->queue);
602599
sd_config_write_same(sdkp, &lim);
603-
blk_mq_freeze_queue(sdkp->disk->queue);
604-
err = queue_limits_commit_update(sdkp->disk->queue, &lim);
605-
blk_mq_unfreeze_queue(sdkp->disk->queue);
600+
err = queue_limits_commit_update_frozen(sdkp->disk->queue, &lim);
606601
if (err)
607602
return err;
608603
return count;
@@ -3714,9 +3709,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
37143709
sd_config_write_same(sdkp, &lim);
37153710
kfree(buffer);
37163711

3717-
blk_mq_freeze_queue(sdkp->disk->queue);
3718-
err = queue_limits_commit_update(sdkp->disk->queue, &lim);
3719-
blk_mq_unfreeze_queue(sdkp->disk->queue);
3712+
err = queue_limits_commit_update_frozen(sdkp->disk->queue, &lim);
37203713
if (err)
37213714
return err;
37223715

drivers/scsi/sr.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -797,10 +797,7 @@ static int get_sectorsize(struct scsi_cd *cd)
797797

798798
lim = queue_limits_start_update(q);
799799
lim.logical_block_size = sector_size;
800-
blk_mq_freeze_queue(q);
801-
err = queue_limits_commit_update(q, &lim);
802-
blk_mq_unfreeze_queue(q);
803-
return err;
800+
return queue_limits_commit_update_frozen(q, &lim);
804801
}
805802

806803
static int get_capabilities(struct scsi_cd *cd)

include/linux/blkdev.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,8 @@ queue_limits_start_update(struct request_queue *q)
919919
mutex_lock(&q->limits_lock);
920920
return q->limits;
921921
}
922+
int queue_limits_commit_update_frozen(struct request_queue *q,
923+
struct queue_limits *lim);
922924
int queue_limits_commit_update(struct request_queue *q,
923925
struct queue_limits *lim);
924926
int queue_limits_set(struct request_queue *q, struct queue_limits *lim);

0 commit comments

Comments
 (0)