Commit 281aa01c authored by Long Li's avatar Long Li
Browse files

block: fix kabi in struct queue_limits

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I9VTE3


CVE: NA

--------------------------------

Fix kabi breakage in struct queue_limits.

Signed-off-by: default avatarLong Li <leo.lilong@huawei.com>
parent fed7e6c8
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ __setup("precise_iostat=", precise_iostat_setup);
 * For queue allocation
 */
struct kmem_cache *blk_requestq_cachep;
struct kmem_cache *queue_atomic_write_cachep;

/*
 * Controlling structure to kblockd
@@ -760,6 +761,7 @@ static void blk_timeout_work(struct work_struct *work)
struct request_queue *blk_alloc_queue(int node_id)
{
	struct request_queue *q;
	struct queue_atomic_write_limits *aw_limits;
	int ret;

	q = kmem_cache_alloc_node(blk_requestq_cachep,
@@ -767,10 +769,17 @@ struct request_queue *blk_alloc_queue(int node_id)
	if (!q)
		return NULL;

	aw_limits = kmem_cache_alloc_node(queue_atomic_write_cachep,
				GFP_KERNEL | __GFP_ZERO, node_id);
	if (!aw_limits)
		goto fail_q;

	q->limits.aw_limits = aw_limits;

	q->last_merge = NULL;

	if (blk_alloc_queue_dispatch_async(q))
		goto fail_q;
		goto fail_aw;

	q->id = ida_simple_get(&blk_queue_ida, 0, 0, GFP_KERNEL);
	if (q->id < 0)
@@ -825,6 +834,7 @@ struct request_queue *blk_alloc_queue(int node_id)

	blk_queue_dma_alignment(q, 511);
	blk_set_default_limits(&q->limits);
	blk_set_default_atomic_write_limits(&q->limits);
	q->nr_requests = BLKDEV_MAX_RQ;

	return q;
@@ -841,6 +851,8 @@ struct request_queue *blk_alloc_queue(int node_id)
	ida_simple_remove(&blk_queue_ida, q->id);
fail_dispatch_async:
	blk_free_queue_dispatch_async(q);
fail_aw:
	kmem_cache_free(queue_atomic_write_cachep, aw_limits);
fail_q:
	kmem_cache_free(blk_requestq_cachep, q);
	return NULL;
@@ -2159,6 +2171,8 @@ int __init blk_dev_init(void)

	blk_requestq_cachep = kmem_cache_create("request_queue",
			sizeof(struct request_queue), 0, SLAB_PANIC, NULL);
	queue_atomic_write_cachep = kmem_cache_create("queue_atomic_write",
			sizeof(struct queue_atomic_write_limits), 0, SLAB_PANIC, NULL);

	blk_debugfs_root = debugfs_create_dir("block", NULL);

+1 −1
Original line number Diff line number Diff line
@@ -195,7 +195,7 @@ static inline unsigned get_max_io_size(struct request_queue *q,
	 * it may less than the bio size, which we cannot tolerate.
	 */
	if (bio->bi_opf & REQ_ATOMIC)
		max_sectors = q->limits.atomic_write_max_sectors;
		max_sectors = q->limits.aw_limits->atomic_write_max_sectors;
	else
		max_sectors = sectors;

+23 −6
Original line number Diff line number Diff line
@@ -63,6 +63,20 @@ void blk_set_default_limits(struct queue_limits *lim)
}
EXPORT_SYMBOL(blk_set_default_limits);

void blk_set_default_atomic_write_limits(struct queue_limits *lim)
{
	if (lim->aw_limits) {
		lim->aw_limits->atomic_write_hw_max = 0;
		lim->aw_limits->atomic_write_max_sectors = 0;
		lim->aw_limits->atomic_write_hw_boundary = 0;
		lim->aw_limits->atomic_write_hw_unit_min = 0;
		lim->aw_limits->atomic_write_unit_min = 0;
		lim->aw_limits->atomic_write_hw_unit_max = 0;
		lim->aw_limits->atomic_write_unit_max = 0;
	}
}
EXPORT_SYMBOL(blk_set_default_atomic_write_limits);

/**
 * blk_set_stacking_limits - set default limits for stacking devices
 * @lim:  the queue_limits structure to reset
@@ -153,13 +167,16 @@ void blk_atomic_writes_update_limits(struct queue_limits *limits)

	unit_limit = rounddown_pow_of_two(unit_limit);

	limits->atomic_write_max_sectors =
		min(limits->atomic_write_hw_max >> SECTOR_SHIFT,
	if (!limits->aw_limits)
		return;

	limits->aw_limits->atomic_write_max_sectors =
		min(limits->aw_limits->atomic_write_hw_max >> SECTOR_SHIFT,
			limits->max_hw_sectors);
	limits->atomic_write_unit_min =
		min(limits->atomic_write_hw_unit_min, unit_limit);
	limits->atomic_write_unit_max =
		min(limits->atomic_write_hw_unit_max, unit_limit);
	limits->aw_limits->atomic_write_unit_min =
		min(limits->aw_limits->atomic_write_hw_unit_min, unit_limit);
	limits->aw_limits->atomic_write_unit_max =
		min(limits->aw_limits->atomic_write_hw_unit_max, unit_limit);
}

EXPORT_SYMBOL(blk_atomic_writes_update_limits);
+1 −0
Original line number Diff line number Diff line
@@ -822,6 +822,7 @@ static void blk_free_queue_rcu(struct rcu_head *rcu_head)
					       rcu_head);

	percpu_ref_exit(&q->q_usage_counter);
	kmem_cache_free(queue_atomic_write_cachep, q->limits.aw_limits);
	kmem_cache_free(blk_requestq_cachep, q);
}

+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ struct blk_flush_queue {
};

extern struct kmem_cache *blk_requestq_cachep;
extern struct kmem_cache *queue_atomic_write_cachep;
extern struct kobj_type blk_queue_ktype;
extern struct ida blk_queue_ida;

Loading