From 3cb783af3a92f0ab0fe310e8325693020c7ae2f7 Mon Sep 17 00:00:00 2001 From: johann Date: Tue, 6 Oct 2009 08:22:21 +0000 Subject: [PATCH] Branch b1_8 b=20903 i=rread i=dmitry Make obd_zombie_barrier() no-op if called from the zombie thread context. --- lustre/obdclass/genops.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c index 99f53e5..1f7df29 100644 --- a/lustre/obdclass/genops.c +++ b/lustre/obdclass/genops.c @@ -1466,6 +1466,7 @@ static struct completion obd_zombie_start; static struct completion obd_zombie_stop; static unsigned long obd_zombie_flags; static cfs_waitq_t obd_zombie_waitq; +static pid_t obd_zombie_pid; enum { OBD_ZOMBIE_STOP = 1 @@ -1511,6 +1512,10 @@ static int obd_zombie_is_idle(void) void obd_zombie_barrier(void) { struct l_wait_info lwi = { 0 }; + + if (obd_zombie_pid == cfs_curproc_pid()) + /* don't wait for myself */ + return; l_wait_event(obd_zombie_waitq, obd_zombie_is_idle(), &lwi); } EXPORT_SYMBOL(obd_zombie_barrier); @@ -1528,6 +1533,8 @@ static int obd_zombie_impexp_thread(void *unused) complete(&obd_zombie_start); + obd_zombie_pid = cfs_curproc_pid(); + while(!test_bit(OBD_ZOMBIE_STOP, &obd_zombie_flags)) { struct l_wait_info lwi = { 0 }; @@ -1577,6 +1584,7 @@ int obd_zombie_impexp_init(void) init_completion(&obd_zombie_start); init_completion(&obd_zombie_stop); cfs_waitq_init(&obd_zombie_waitq); + obd_zombie_pid = 0; #ifdef __KERNEL__ rc = cfs_kernel_thread(obd_zombie_impexp_thread, NULL, 0); -- 1.8.3.1