Re: [PATCH v3 1/1] nvme: multipath: Implemented new iopolicy "queue-depth"

From: John Meneghini
Date: Tue May 21 2024 - 09:58:53 EST


On 5/21/24 02:46, Hannes Reinecke wrote:
On 5/20/24 22:20, John Meneghini wrote:
From: "Ewan D. Milne" <emilne@xxxxxxxxxx>

..
Tested-by: Marco Patalano <mpatalan@xxxxxxxxxx>
Reviewed-by: Randy Jennings <randyj@xxxxxxxxxx>

I need to fix this. Randy doesn't have a redhat.com email address... Cut an paste error :-(

Tested-by: Jyoti Rani <jani@xxxxxxxxxxxxxxx>

..
+void nvme_subsys_iopolicy_update(struct nvme_subsystem *subsys, int iopolicy)
+{
+    struct nvme_ctrl *ctrl;
+    int old_iopolicy = READ_ONCE(subsys->iopolicy);
+
+    WRITE_ONCE(subsys->iopolicy, iopolicy);
+
+    mutex_lock(&nvme_subsystems_lock);
+    list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) {
+        atomic_set(&ctrl->nr_active, 0);
+        nvme_mpath_clear_ctrl_paths(ctrl);

You always reset the variables here, even if specified iopolicy is
the same than the currently active one.
I'd rather check if the iopolicy is different before changing the settings.

Yes, Keith pointed this out too. This is actually a feature not a bug. In situations were we want to "reset" the nr_active counters on all controllers the user can simply set the queue-depth iopolicy a second time. I don't expect users to do this very often... they shouldn't be changing IO policies back and forth too much... but the ability to "reset" the nr_active counters during testing has been very helpful and important to do. So I'd like to keep this. Moreover, this is NOT the performance path. I don't see the point in making performance optimizations in a code path that is run once a year.

/John