Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 564a232c authored by Arjan van de Ven's avatar Arjan van de Ven Committed by Matthew Wilcox
Browse files

NVMe: Set TASK_INTERRUPTIBLE before processing queues



The kthread has two tasks; handling timeouts (for which it runs once per
second), and submitting queued BIOs.  If a BIO happens to be queued after
the thread has processed the queue but before it calls schedule_timeout(),
the thread will sleep for a second before submitting it, which can cause
performance problems in some rare cases (that will become more common in
a subsequent patch).

Signed-off-by: default avatarArjan van de Ven <arjan@linux.intel.com>
Tested-by: default avatarKeith Busch <keith.busch@intel.com>
Signed-off-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
parent 5e82e952
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1291,7 +1291,7 @@ static int nvme_kthread(void *data)
	struct nvme_dev *dev;

	while (!kthread_should_stop()) {
		__set_current_state(TASK_RUNNING);
		set_current_state(TASK_INTERRUPTIBLE);
		spin_lock(&dev_list_lock);
		list_for_each_entry(dev, &dev_list, node) {
			int i;
@@ -1308,7 +1308,6 @@ static int nvme_kthread(void *data)
			}
		}
		spin_unlock(&dev_list_lock);
		set_current_state(TASK_INTERRUPTIBLE);
		schedule_timeout(round_jiffies_relative(HZ));
	}
	return 0;