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

Re: [PATCH v3 6/6] nbd: add nr_hw_queues module parameter for pre-created devices





在 2026/7/22 11:53, yu kuai 写道:
Hi,

在 2026/7/13 14:56, Yang Erkun 写道:
Previous commit can help remove all freeze for netlink newly created nbd
device. But for the devices pre-created at module load(nbds_max default
as 16), the nr_hw_queues was setting default as 1, then ioctl/netlink
path will set the real connection count, and blk_mq_update_nr_hw_queues
in nbd_start_device will introduce freeze.

Add an nr_hw_queues module parameter so that users who know their
expected connection count can pre-created devices with the right queue
count to avoid this freeze too.

I'm fine with this, but this is misleading. Please also add comment to
emphasize this module parameter is just to avoid queue freeze if user configure
the exact number of socks as this new module parameter. Otherwise, the real
nr_hw_queues is still depend on the real number of user configured socks.

OK, will add this comment in next version! Thanks a lot for your careful review!



Signed-off-by: Yang Erkun <yangerkun@huawei.com>
---
   drivers/block/nbd.c | 8 +++++++-
   1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 2c7b09c70da2..f918c9efa9b2 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -166,6 +166,7 @@ static struct dentry *nbd_dbg_dir;
static unsigned int nbds_max = 16;
   static int max_part = 16;
+static int nr_hw_queues = 1;
   static int part_shift;
static int nbd_dev_dbg_init(struct nbd_device *nbd);
@@ -2752,8 +2753,10 @@ static int __init nbd_init(void)
   	}
   	nbd_dbg_init();
+ if (nr_hw_queues < 1)
+		nr_hw_queues = 1;
   	for (i = 0; i < nbds_max; i++)
-		nbd_dev_add(i, 1, 1);
+		nbd_dev_add(i, 1, nr_hw_queues);
   	return 0;
   }
@@ -2814,3 +2817,6 @@ module_param(nbds_max, int, 0444);
   MODULE_PARM_DESC(nbds_max, "number of network block devices to initialize (default: 16)");
   module_param(max_part, int, 0444);
   MODULE_PARM_DESC(max_part, "number of partitions per device (default: 16)");
+module_param(nr_hw_queues, int, 0444);
+MODULE_PARM_DESC(nr_hw_queues,
+"number of hardware queues for devices pre-created at module load (default: 1). ");



Reply to: