Skip to contentSkip to conversation

ocfs2/dlm: fix misuse of list_move_tail() in dlm_run_purge_list()

PATCH New Xue jiufei 2 participants 2 messages Jun 13, 2014 OCFS2

lore
Share & tools
lore

Xue jiufei

author
#0 lore raw

PATCH v2 1/1 ocfs2/dlm: fix misuse of list_move_tail() in dlm_run_purge_list()

When a lockres in purge list but is still in use, it should be moved to the tail of purge list. dlm_thread will continue to check next lockres in purge list. However, code list_move_tail(&dlm->purge_list, &lockres->purge) will do *no* movements, so dlm_thread will purge the same lockres in this loop again and again. If it is in use for a long time, other lockres will not be processed.

---
 fs/ocfs2/dlm/dlmthread.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fs/ocfs2/dlm/dlmthread.c +1 -1
index 9db869d..cf53a82 100644
@@ -264,7 +264,7 @@ static void dlm_run_purge_list(struct dlm_ctxt *dlm,
 			     "used %d, state %d\n", dlm->name,
 			     lockres->lockname.len, lockres->lockname.name,
 			     !unused, lockres->state);
-			list_move_tail(&dlm->purge_list, &lockres->purge);
+			list_move_tail(&lockres->purge, &dlm->purge_list);
 			spin_unlock(&lockres->spinlock);
 			continue;
 		}
Signature · 1 line
1.8.3.4
#1 lore raw

PATCH v2 1/1 ocfs2/dlm: fix misuse of list_move_tail() in dlm_run_purge_list()

Quoted 9 lines · Xue jiufei

When a lockres in purge list but is still in use, it should be moved to the tail of purge list. dlm_thread will continue to check next lockres in purge list. However, code list_move_tail(&dlm->purge_list, &lockres->purge) will do *no* movements, so dlm_thread will purge the same lockres in this loop again and again. If it is in use for a long time, other lockres will not be processed.

Oh didn't realize, this must be the fixed version of the patch? It might've been nice to label it V2 or something. Anyway, thanks for this. Please ignore my previous mail.

--
Mark Fasheh