@@ -476,16 +476,21 @@ EXPORT_SYMBOL_GPL(queue_limits_commit_update_frozen);
* queue_limits_set - apply queue limits to queue
* @q: queue to update
* @lim: limits to apply
+ * @old_lim: store previous limits if non-null.
*
- * Apply the limits in @lim that were freshly initialized to @q.
+ * Apply the limits in @lim that were freshly initialized to @q, and
+ * optionally return the previous limits in @old_lim.
* To update existing limits use queue_limits_start_update() and
* queue_limits_commit_update() instead.
*
* Returns 0 if successful, else a negative error code.
*/
-int queue_limits_set(struct request_queue *q, struct queue_limits *lim)
+int queue_limits_set(struct request_queue *q, struct queue_limits *lim,
+ struct queue_limits *old_lim)
{
mutex_lock(&q->limits_lock);
+ if (old_lim)
+ *old_lim = q->limits;
return queue_limits_commit_update(q, lim);
}
EXPORT_SYMBOL_GPL(queue_limits_set);
@@ -1883,7 +1883,7 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
if (dm_table_supports_atomic_writes(t))
limits->features |= BLK_FEAT_ATOMIC_WRITES;
- r = queue_limits_set(q, limits);
+ r = queue_limits_set(q, limits, NULL);
if (r)
return r;
@@ -81,7 +81,7 @@ static int linear_set_limits(struct mddev *mddev)
return err;
}
- return queue_limits_set(mddev->gendisk->queue, &lim);
+ return queue_limits_set(mddev->gendisk->queue, &lim, NULL);
}
static struct linear_conf *linear_conf(struct mddev *mddev, int raid_disks)
@@ -390,7 +390,7 @@ static int raid0_set_limits(struct mddev *mddev)
queue_limits_cancel_update(mddev->gendisk->queue);
return err;
}
- return queue_limits_set(mddev->gendisk->queue, &lim);
+ return queue_limits_set(mddev->gendisk->queue, &lim, NULL);
}
static int raid0_run(struct mddev *mddev)
@@ -3223,7 +3223,7 @@ static int raid1_set_limits(struct mddev *mddev)
queue_limits_cancel_update(mddev->gendisk->queue);
return err;
}
- return queue_limits_set(mddev->gendisk->queue, &lim);
+ return queue_limits_set(mddev->gendisk->queue, &lim, NULL);
}
static int raid1_run(struct mddev *mddev)
@@ -4024,7 +4024,7 @@ static int raid10_set_queue_limits(struct mddev *mddev)
queue_limits_cancel_update(mddev->gendisk->queue);
return err;
}
- return queue_limits_set(mddev->gendisk->queue, &lim);
+ return queue_limits_set(mddev->gendisk->queue, &lim, NULL);
}
static int raid10_run(struct mddev *mddev)
@@ -7774,7 +7774,7 @@ static int raid5_set_limits(struct mddev *mddev)
/* No restrictions on the number of segments in the request */
lim.max_segments = USHRT_MAX;
- return queue_limits_set(mddev->gendisk->queue, &lim);
+ return queue_limits_set(mddev->gendisk->queue, &lim, NULL);
}
static int raid5_run(struct mddev *mddev)
@@ -953,7 +953,8 @@ int queue_limits_commit_update_frozen(struct request_queue *q,
struct queue_limits *lim);
int queue_limits_commit_update(struct request_queue *q,
struct queue_limits *lim);
-int queue_limits_set(struct request_queue *q, struct queue_limits *lim);
+int queue_limits_set(struct request_queue *q, struct queue_limits *lim,
+ struct queue_limits *old_lim);
int blk_validate_limits(struct queue_limits *lim);
/**
A future device-mapper patch will make use of this new argument. No functional changes intended in this patch. Suggested-by: Damien Le Moal <dlemoal@kernel.org> Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> --- block/blk-settings.c | 9 +++++++-- drivers/md/dm-table.c | 2 +- drivers/md/md-linear.c | 2 +- drivers/md/raid0.c | 2 +- drivers/md/raid1.c | 2 +- drivers/md/raid10.c | 2 +- drivers/md/raid5.c | 2 +- include/linux/blkdev.h | 3 ++- 8 files changed, 15 insertions(+), 9 deletions(-)