Re: [PATCH] dm: Change the default value of rq_affinity from 0 into 1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/15/24 12:56, Mikulas Patocka wrote:
I am wondering how should QUEUE_FLAG_SAME_COMP work for bio-based
devices.

I grepped the kernel for QUEUE_FLAG_SAME_COMP and it is tested in
block/blk-mq.c in blk_mq_complete_need_ipi (this code path is taken only
for request-based devices) and in block/blk-sysfs.c in
queue_rq_affinity_show (this just displays the value in sysfs). There are
no other places where QUEUE_FLAG_SAME_COMP is tested, so I don't see what
effect is it supposed to have.

I think the answer depends on whether or not the underlying device
defines the .submit_bio() callback. From block/blk-core.c:

static void __submit_bio(struct bio *bio)
{
	if (unlikely(!blk_crypto_bio_prep(&bio)))
		return;

	if (!bio->bi_bdev->bd_has_submit_bio) {
		blk_mq_submit_bio(bio);
	} else if (likely(bio_queue_enter(bio) == 0)) {
		struct gendisk *disk = bio->bi_bdev->bd_disk;

		disk->fops->submit_bio(bio);
		blk_queue_exit(disk->queue);
	}
}

In other words, if the .submit_bio() callback is defined, that function
is called. If it is not defined, blk_mq_submit_bio() converts the bio
into a request. QUEUE_FLAG_SAME_COMP affects the request completion
path. On my test setup there are multiple dm instances defined on top of
SCSI devices. The SCSI core does not implement the .submit_bio()
callback.

Thanks,

Bart.




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux