From 3e410cdfff0b69d7923bdc5b29c0b0f5193f1048 Mon Sep 17 00:00:00 2001 From: lsy Date: Fri, 16 Sep 2005 10:15:53 +0000 Subject: [PATCH] igrab() before ll_renew_capa() in case inode is cleared. --- lustre/llite/llite_capa.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c index 4f34a80..299097f 100644 --- a/lustre/llite/llite_capa.c +++ b/lustre/llite/llite_capa.c @@ -120,8 +120,9 @@ static int ll_capa_thread(void *arg) while (1) { struct l_wait_info lwi = { 0 }; - struct obd_capa *ocapa, *tmp, *next = NULL, tcapa; + struct obd_capa *ocapa, *tmp, *next = NULL; unsigned long expiry, sleep = CAPA_PRE_EXPIRY; + struct inode *inode; l_wait_event(capa_thread.t_ctl_waitq, (have_expired_capa() || ll_capa_check_stop()), @@ -139,11 +140,14 @@ static int ll_capa_thread(void *arg) continue; if (__capa_is_to_expire(ocapa)) { - /* copy capa in case it's deleted */ - tcapa = *ocapa; + inode = igrab(ocapa->c_inode); + if (inode == NULL) + continue; spin_unlock(&capa_lock); - rc = ll_renew_capa(&tcapa); + rc = ll_renew_capa(ocapa); + iput(inode); + if (rc) capa_put(ocapa); -- 1.8.3.1