ocfs2-devel.oss.oracle.com archive mirror
 help / color / mirror / Atom feed
From: Sunil Mushran <sunil.mushran@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH 13/18] ocfs2/dlm: Add missing dlm_lock_put()s
Date: Tue Mar 11 16:32:26 2008	[thread overview]
Message-ID: <1205278329-11111-14-git-send-email-sunil.mushran@oracle.com> (raw)
In-Reply-To: <1205278329-11111-1-git-send-email-sunil.mushran@oracle.com>

Mainline commit 2c5c54aca9d0263f81bd4886232835ba31f7635a
Author: Sunil Mushran <sunil.mushran@oracle.com>
Date: Sat, 1 Mar 2008 14:04:20 -0800

Normally locks for remote nodes are freed when that node sends an UNLOCK
message to the master. The master node tags an DLM_UNLOCK_FREE_LOCK action
to do an extra put on the lock at the end.

However, there are times when the master node has to free the locks for the
remote nodes forcibly.

Two cases when this happens are:
1. When the master has migrated the lockres plus all locks to another node.
2. When the master is clearing all the locks of a dead node.

It was in the above two conditions that the dlm was missing the extra put.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
---
 fs/ocfs2/dlm/dlmmaster.c   |    3 +++
 fs/ocfs2/dlm/dlmrecovery.c |    9 +++++++++
 2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index 5b27581..e5ceda9 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -2933,6 +2933,9 @@ static void dlm_remove_nonlocal_locks(struct dlm_ctxt *dlm,
 				dlm_lockres_clear_refmap_bit(lock->ml.node, res);
 				list_del_init(&lock->list);
 				dlm_lock_put(lock);
+				/* In a normal unlock, we would have added a
+				 * DLM_UNLOCK_FREE_LOCK action. Force it. */
+				dlm_lock_put(lock);
 			}
 		}
 		queue++;
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index 3004f95..4a0e7aa 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
@@ -2130,11 +2130,16 @@ static void dlm_free_dead_locks(struct dlm_ctxt *dlm,
 	assert_spin_locked(&dlm->spinlock);
 	assert_spin_locked(&res->spinlock);
 
+	/* We do two dlm_lock_put(). One for removing from list and the other is
+	 * to force the DLM_UNLOCK_FREE_LOCK action so as to free the locks */
+
 	/* TODO: check pending_asts, pending_basts here */
 	list_for_each_entry_safe(lock, next, &res->granted, list) {
 		if (lock->ml.node == dead_node) {
 			list_del_init(&lock->list);
 			dlm_lock_put(lock);
+			/* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */
+			dlm_lock_put(lock);
 			freed++;
 		}
 	}
@@ -2142,6 +2147,8 @@ static void dlm_free_dead_locks(struct dlm_ctxt *dlm,
 		if (lock->ml.node == dead_node) {
 			list_del_init(&lock->list);
 			dlm_lock_put(lock);
+			/* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */
+			dlm_lock_put(lock);
 			freed++;
 		}
 	}
@@ -2149,6 +2156,8 @@ static void dlm_free_dead_locks(struct dlm_ctxt *dlm,
 		if (lock->ml.node == dead_node) {
 			list_del_init(&lock->list);
 			dlm_lock_put(lock);
+			/* Can't schedule DLM_UNLOCK_FREE_LOCK - do manually */
+			dlm_lock_put(lock);
 			freed++;
 		}
 	}
-- 
1.5.3.4

      parent reply	other threads:[~2008-03-11 16:32 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-11 16:32 [Ocfs2-devel] Backports to OCFS2 1.4 Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 08/18] ocfs2: Correct use of ! and & in aops.c Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 07/18] ocfs2: make dlm_do_assert_master() static Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 01/18] ocfs2: Add helper task_pid_nr Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 05/18] ocfs2: possible cleanups Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 04/18] ocfs2: Fix writeout in ocfs2_data_convert_worker() Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 06/18] ocfs2: make ocfs2_downconvert_thread() static Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 02/18] ocfs2: Spelling fixes Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 11/18] ocfs2: Fix endian bug in o2dlm protocol negotiation Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 14/18] ocfs2/dlm: Add missing dlm_lockres_put()s in migration path Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 16/18] ocfs2/dlm: Print message showing the recovery master Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 15/18] ocfs2/dlm: Add missing dlm_lockres_put()s Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 03/18] ocfs2: Negotiate locking protocol versions Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 12/18] ocfs2: Fix an endian bug in online resize Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 10/18] ocfs2: Use dlm_print_one_lock_resource for lock resource print Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 09/18] ocfs2/dlm: fix printk warning Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 17/18] ocfs2/dlm: dlm_thread should not sleep while holding the dlm_spinlock Sunil Mushran
2008-03-11 16:32 ` [Ocfs2-devel] [PATCH 18/18] ocfs2: Fix NULL pointer dereferences in o2net Sunil Mushran
2008-03-16 21:10   ` [Ocfs2-devel] how to use run_lvb_torture.py ? Coly Li
2008-03-17  5:09     ` Marcos E. Matsunaga
2008-03-11 16:32 ` Sunil Mushran [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1205278329-11111-14-git-send-email-sunil.mushran@oracle.com \
    --to=sunil.mushran@oracle.com \
    --cc=ocfs2-devel@oss.oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).