[PATCH 03/13] libmultipath: Add path selection support

John Garry john.g.garry at oracle.com
Tue Mar 3 04:41:50 PST 2026


>>
> The nvme_mpath_start_request() increments ns->ctrl->nr_active, and 
> nvme_mpath_end_request() decrements it. This means that nr_active is 
> maintained per controller. If multiple NVMe namespaces are created and 
> attached to the same controller, their I/O activity is accumulated in 
> the single ctrl->nr_active counter.
> 
> In contrast, libmultipath defines nr_active in struct mpath_device, 
> which is referenced from struct nvme_ns. Even if we add code to update 
> mpath_device->nr_active, that accounting would effectively be per 
> namespace, not per controller.

Right, I need to change that back to per-controller.

> 
> The nr_active value is used by the queue-depth policy. Currently, 
> mpath_queue_depth_path() accesses mpath_device->nr_active to make 
> forwarding decisions. However, if mpath_device->nr_active is maintained 
> per namespace, it does not correctly reflect controller-wide load when 
> multiple namespaces share the same controller.

Yes

> 
> Therefore, instead of maintaining a separate nr_active in struct 
> mpath_device, it may be more appropriate for mpath_queue_depth_path() to 
> reference ns->ctrl->nr_active directly. In that case, nr_active could be 
> removed from struct mpath_device entirely.
> 

I think so, but we will need scsi to maintain such a count internally to 
support this policy. And for NVMe we will need some abstraction to 
lookup the per-controller QD for a mpath_device.

Thanks for checking!



More information about the Linux-nvme mailing list