From 10ebd8556b7990499c896a550e3d416b444211e6 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 02:23:07 +0000
Subject: [PATCH] add led

---
 kernel/fs/fscache/object.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/kernel/fs/fscache/object.c b/kernel/fs/fscache/object.c
index fb9794d..cb2146e 100644
--- a/kernel/fs/fscache/object.c
+++ b/kernel/fs/fscache/object.c
@@ -807,8 +807,6 @@
 }
 EXPORT_SYMBOL(fscache_object_destroy);
 
-static DECLARE_WAIT_QUEUE_HEAD(fscache_object_cong_wait);
-
 /*
  * enqueue an object for metadata-type processing
  */
@@ -817,12 +815,16 @@
 	_enter("{OBJ%x}", object->debug_id);
 
 	if (fscache_get_object(object, fscache_obj_get_queue) >= 0) {
+		wait_queue_head_t *cong_wq =
+			&get_cpu_var(fscache_object_cong_wait);
 
 		if (queue_work(fscache_object_wq, &object->work)) {
 			if (fscache_object_congested())
-				wake_up(&fscache_object_cong_wait);
+				wake_up(cong_wq);
 		} else
 			fscache_put_object(object, fscache_obj_put_queue);
+
+		put_cpu_var(fscache_object_cong_wait);
 	}
 }
 
@@ -840,15 +842,16 @@
  */
 bool fscache_object_sleep_till_congested(signed long *timeoutp)
 {
+	wait_queue_head_t *cong_wq = this_cpu_ptr(&fscache_object_cong_wait);
 	DEFINE_WAIT(wait);
 
 	if (fscache_object_congested())
 		return true;
 
-	add_wait_queue_exclusive(&fscache_object_cong_wait, &wait);
+	add_wait_queue_exclusive(cong_wq, &wait);
 	if (!fscache_object_congested())
 		*timeoutp = schedule_timeout(*timeoutp);
-	finish_wait(&fscache_object_cong_wait, &wait);
+	finish_wait(cong_wq, &wait);
 
 	return fscache_object_congested();
 }

--
Gitblit v1.6.2