All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Teigland <teigland@redhat.com>
To: akpm@osdl.org
Cc: linux-kernel@vger.kernel.org
Subject: [patch 05/12] dlm: rsb flag ops with inlined functions
Date: Fri, 15 Jul 2005 18:36:23 +0800	[thread overview]
Message-ID: <20050715103623.GH17316@redhat.com> (raw)

[-- Attachment #1: rsb-flags.patch --]
[-- Type: text/plain, Size: 10307 bytes --]

Replace test/set/clear_bit of rsb flags with new inline functions that use
the less expense non-atomic bit ops.

Signed-off-by: David Teigland <teigland@redhat.com>

Index: linux-2.6.12-mm1/drivers/dlm/debug_fs.c
===================================================================
--- linux-2.6.12-mm1.orig/drivers/dlm/debug_fs.c
+++ linux-2.6.12-mm1/drivers/dlm/debug_fs.c
@@ -114,7 +114,7 @@ static int print_resource(struct dlm_rsb
 			seq_printf(s, "%02x ",
 				   (unsigned char) res->res_lvbptr[i]);
 		}
-		if (test_bit(RESFL_VALNOTVALID, &res->res_flags))
+		if (rsb_flag(res, RSB_VALNOTVALID))
 			seq_printf(s, " (INVALID)");
 		seq_printf(s, "\n");
 	}
Index: linux-2.6.12-mm1/drivers/dlm/dlm_internal.h
===================================================================
--- linux-2.6.12-mm1.orig/drivers/dlm/dlm_internal.h
+++ linux-2.6.12-mm1/drivers/dlm/dlm_internal.h
@@ -262,25 +262,11 @@ struct dlm_lkb {
 	long			lkb_astparam;	/* caller's ast arg */
 };
 
-
-/* find_rsb() flags */
-
-#define R_MASTER		1	/* only return rsb if it's a master */
-#define R_CREATE		2	/* create/add rsb if not found */
-
-#define RESFL_MASTER_WAIT	0
-#define RESFL_MASTER_UNCERTAIN	1
-#define RESFL_VALNOTVALID	2
-#define RESFL_VALNOTVALID_PREV	3
-#define RESFL_NEW_MASTER	4
-#define RESFL_NEW_MASTER2	5
-#define RESFL_RECOVER_CONVERT	6
-
 struct dlm_rsb {
 	struct dlm_ls		*res_ls;	/* the lockspace */
 	struct kref		res_ref;
 	struct semaphore	res_sem;
-	unsigned long		res_flags;	/* RESFL_ */
+	unsigned long		res_flags;
 	int			res_length;	/* length of rsb name */
 	int			res_nodeid;
 	uint32_t                res_lvbseq;
@@ -301,6 +287,38 @@ struct dlm_rsb {
 	char			res_name[1];
 };
 
+/* find_rsb() flags */
+
+#define R_MASTER		1	/* only return rsb if it's a master */
+#define R_CREATE		2	/* create/add rsb if not found */
+
+/* rsb_flags */
+
+enum rsb_flags {
+	RSB_MASTER_WAIT,
+	RSB_MASTER_UNCERTAIN,
+	RSB_VALNOTVALID,
+	RSB_VALNOTVALID_PREV,
+	RSB_NEW_MASTER,
+	RSB_NEW_MASTER2,
+	RSB_RECOVER_CONVERT,
+};
+
+static inline void rsb_set_flag(struct dlm_rsb *r, enum rsb_flags flag)
+{
+	__set_bit(flag, &r->res_flags);
+}
+
+static inline void rsb_clear_flag(struct dlm_rsb *r, enum rsb_flags flag)
+{
+	__clear_bit(flag, &r->res_flags);
+}
+
+static inline int rsb_flag(struct dlm_rsb *r, enum rsb_flags flag)
+{
+	return test_bit(flag, &r->res_flags);
+}
+
 
 /* dlm_header is first element of all structs sent between nodes */
 
Index: linux-2.6.12-mm1/drivers/dlm/lock.c
===================================================================
--- linux-2.6.12-mm1.orig/drivers/dlm/lock.c
+++ linux-2.6.12-mm1/drivers/dlm/lock.c
@@ -317,18 +317,17 @@ static int _search_rsb(struct dlm_ls *ls
 	list_move(&r->res_hashchain, &ls->ls_rsbtbl[b].list);
 
 	if (r->res_nodeid == -1) {
-		clear_bit(RESFL_MASTER_WAIT, &r->res_flags);
-		clear_bit(RESFL_MASTER_UNCERTAIN, &r->res_flags);
+		rsb_clear_flag(r, RSB_MASTER_WAIT);
+		rsb_clear_flag(r, RSB_MASTER_UNCERTAIN);
 		r->res_trial_lkid = 0;
 	} else if (r->res_nodeid > 0) {
-		clear_bit(RESFL_MASTER_WAIT, &r->res_flags);
-		set_bit(RESFL_MASTER_UNCERTAIN, &r->res_flags);
+		rsb_clear_flag(r, RSB_MASTER_WAIT);
+		rsb_set_flag(r, RSB_MASTER_UNCERTAIN);
 		r->res_trial_lkid = 0;
 	} else {
 		DLM_ASSERT(r->res_nodeid == 0, dlm_print_rsb(r););
-		DLM_ASSERT(!test_bit(RESFL_MASTER_WAIT, &r->res_flags),
-			   dlm_print_rsb(r););
-		DLM_ASSERT(!test_bit(RESFL_MASTER_UNCERTAIN, &r->res_flags),);
+		DLM_ASSERT(!rsb_flag(r, RSB_MASTER_WAIT), dlm_print_rsb(r););
+		DLM_ASSERT(!rsb_flag(r, RSB_MASTER_UNCERTAIN),);
 	}
  out:
 	*r_ret = r;
@@ -837,7 +836,7 @@ static void set_lvb_lock(struct dlm_rsb 
 
 	} else if (b == 0) {
 		if (lkb->lkb_exflags & DLM_LKF_IVVALBLK) {
-			set_bit(RESFL_VALNOTVALID, &r->res_flags);
+			rsb_set_flag(r, RSB_VALNOTVALID);
 			return;
 		}
 
@@ -856,10 +855,10 @@ static void set_lvb_lock(struct dlm_rsb 
 		memcpy(r->res_lvbptr, lkb->lkb_lvbptr, len);
 		r->res_lvbseq++;
 		lkb->lkb_lvbseq = r->res_lvbseq;
-		clear_bit(RESFL_VALNOTVALID, &r->res_flags);
+		rsb_clear_flag(r, RSB_VALNOTVALID);
 	}
 
-	if (test_bit(RESFL_VALNOTVALID, &r->res_flags))
+	if (rsb_flag(r, RSB_VALNOTVALID))
 		lkb->lkb_sbflags |= DLM_SBF_VALNOTVALID;
 }
 
@@ -869,7 +868,7 @@ static void set_lvb_unlock(struct dlm_rs
 		return;
 
 	if (lkb->lkb_exflags & DLM_LKF_IVVALBLK) {
-		set_bit(RESFL_VALNOTVALID, &r->res_flags);
+		rsb_set_flag(r, RSB_VALNOTVALID);
 		return;
 	}
 
@@ -887,7 +886,7 @@ static void set_lvb_unlock(struct dlm_rs
 
 	memcpy(r->res_lvbptr, lkb->lkb_lvbptr, r->res_ls->ls_lvblen);
 	r->res_lvbseq++;
-	clear_bit(RESFL_VALNOTVALID, &r->res_flags);
+	rsb_clear_flag(r, RSB_VALNOTVALID);
 }
 
 /* lkb is process copy (pc) */
@@ -1419,8 +1418,9 @@ static int set_master(struct dlm_rsb *r,
 	struct dlm_ls *ls = r->res_ls;
 	int error, dir_nodeid, ret_nodeid, our_nodeid = dlm_our_nodeid();
 
-	if (test_and_clear_bit(RESFL_MASTER_UNCERTAIN, &r->res_flags)) {
-		set_bit(RESFL_MASTER_WAIT, &r->res_flags);
+	if (rsb_flag(r, RSB_MASTER_UNCERTAIN)) {
+		rsb_clear_flag(r, RSB_MASTER_UNCERTAIN);
+		rsb_set_flag(r, RSB_MASTER_WAIT);
 		r->res_trial_lkid = lkb->lkb_id;
 		lkb->lkb_nodeid = r->res_nodeid;
 		return 0;
@@ -1437,7 +1437,7 @@ static int set_master(struct dlm_rsb *r,
 		return 0;
 	}
 
-	if (test_bit(RESFL_MASTER_WAIT, &r->res_flags)) {
+	if (rsb_flag(r, RSB_MASTER_WAIT)) {
 		list_add_tail(&lkb->lkb_rsb_lookup, &r->res_lookup);
 		return 1;
 	}
@@ -1455,7 +1455,7 @@ static int set_master(struct dlm_rsb *r,
 	dir_nodeid = dlm_dir_nodeid(r);
 
 	if (dir_nodeid != our_nodeid) {
-		set_bit(RESFL_MASTER_WAIT, &r->res_flags);
+		rsb_set_flag(r, RSB_MASTER_WAIT);
 		send_lookup(r, lkb);
 		return 1;
 	}
@@ -1481,7 +1481,7 @@ static int set_master(struct dlm_rsb *r,
 		return 0;
 	}
 
-	set_bit(RESFL_MASTER_WAIT, &r->res_flags);
+	rsb_set_flag(r, RSB_MASTER_WAIT);
 	r->res_trial_lkid = lkb->lkb_id;
 	r->res_nodeid = ret_nodeid;
 	lkb->lkb_nodeid = ret_nodeid;
@@ -1503,7 +1503,7 @@ static void confirm_master(struct dlm_rs
 {
 	struct dlm_lkb *lkb, *safe;
 
-	if (!test_bit(RESFL_MASTER_WAIT, &r->res_flags))
+	if (!rsb_flag(r, RSB_MASTER_WAIT))
 		return;
 
 	switch (error) {
@@ -1512,7 +1512,7 @@ static void confirm_master(struct dlm_rs
 		/* the remote master queued our request, or
 		   the remote dir node told us we're the master */
 
-		clear_bit(RESFL_MASTER_WAIT, &r->res_flags);
+		rsb_clear_flag(r, RSB_MASTER_WAIT);
 		r->res_trial_lkid = 0;
 
 		list_for_each_entry_safe(lkb, safe, &r->res_lookup,
@@ -1544,7 +1544,7 @@ static void confirm_master(struct dlm_rs
 
 		r->res_nodeid = -1;
 		r->res_trial_lkid = 0;
-		clear_bit(RESFL_MASTER_WAIT, &r->res_flags);
+		rsb_clear_flag(r, RSB_MASTER_WAIT);
 		break;
 
 	default:
@@ -2830,7 +2830,7 @@ static void receive_request_reply(struct
 	case -ENOTBLK:
 		/* find_rsb failed to find rsb or rsb wasn't master */
 
-		DLM_ASSERT(test_bit(RESFL_MASTER_WAIT, &r->res_flags),
+		DLM_ASSERT(rsb_flag(r, RSB_MASTER_WAIT),
 		           log_print("receive_request_reply error %d", error);
 		           dlm_print_lkb(lkb);
 		           dlm_print_rsb(r););
@@ -3188,7 +3188,7 @@ static void recover_convert_waiter(struc
 
 		/* Same special case as in receive_rcom_lock_args() */
 		lkb->lkb_grmode = DLM_LOCK_IV;
-		set_bit(RESFL_RECOVER_CONVERT, &lkb->lkb_resource->res_flags);
+		rsb_set_flag(lkb->lkb_resource, RSB_RECOVER_CONVERT);
 		unhold_lkb(lkb);
 
 	} else if (lkb->lkb_rqmode >= lkb->lkb_grmode) {
@@ -3482,7 +3482,7 @@ static int receive_rcom_lock_args(struct
 	if (rl->rl_wait_type == DLM_MSG_CONVERT && middle_conversion(lkb)) {
 		rl->rl_status = DLM_LKSTS_CONVERT;
 		lkb->lkb_grmode = DLM_LOCK_IV;
-		set_bit(RESFL_RECOVER_CONVERT, &r->res_flags);
+		rsb_set_flag(r, RSB_RECOVER_CONVERT);
 	}
 
 	return 0;
Index: linux-2.6.12-mm1/drivers/dlm/recover.c
===================================================================
--- linux-2.6.12-mm1.orig/drivers/dlm/recover.c
+++ linux-2.6.12-mm1/drivers/dlm/recover.c
@@ -309,8 +309,8 @@ static void set_new_master(struct dlm_rs
 
 	set_master_lkbs(r);
 
-	set_bit(RESFL_NEW_MASTER, &r->res_flags);
-	set_bit(RESFL_NEW_MASTER2, &r->res_flags);
+	rsb_set_flag(r, RSB_NEW_MASTER);
+	rsb_set_flag(r, RSB_NEW_MASTER2);
 	unlock_rsb(r);
 }
 
@@ -487,11 +487,11 @@ int dlm_recover_locks(struct dlm_ls *ls)
 	down_read(&ls->ls_root_sem);
 	list_for_each_entry(r, &ls->ls_root_list, res_root_list) {
 		if (is_master(r)) {
-			clear_bit(RESFL_NEW_MASTER, &r->res_flags);
+			rsb_clear_flag(r, RSB_NEW_MASTER);
 			continue;
 		}
 
-		if (!test_bit(RESFL_NEW_MASTER, &r->res_flags))
+		if (!rsb_flag(r, RSB_NEW_MASTER))
 			continue;
 
 		error = dlm_recovery_stopped(ls);
@@ -525,7 +525,7 @@ void dlm_recovered_lock(struct dlm_rsb *
 {
 	r->res_recover_locks_count--;
 	if (!r->res_recover_locks_count) {
-		clear_bit(RESFL_NEW_MASTER, &r->res_flags);
+		rsb_clear_flag(r, RSB_NEW_MASTER);
 		recover_list_del(r);
 	}
 
@@ -538,7 +538,7 @@ void dlm_recovered_lock(struct dlm_rsb *
  * the VALNOTVALID flag if necessary, and determining the correct lvb contents
  * based on the lvb's of the locks held on the rsb.
  *
- * RESFL_VALNOTVALID is set if there are only NL/CR locks on the rsb.  If it
+ * RSB_VALNOTVALID is set if there are only NL/CR locks on the rsb.  If it
  * was already set prior to recovery, it's not cleared, regardless of locks.
  *
  * The LVB contents are only considered for changing when this is a new master
@@ -594,10 +594,10 @@ static void recover_lvb(struct dlm_rsb *
 		goto out;
 
 	if (!big_lock_exists)
-		set_bit(RESFL_VALNOTVALID, &r->res_flags);
+		rsb_set_flag(r, RSB_VALNOTVALID);
 
 	/* don't mess with the lvb unless we're the new master */
-	if (!test_bit(RESFL_NEW_MASTER2, &r->res_flags))
+	if (!rsb_flag(r, RSB_NEW_MASTER2))
 		goto out;
 
 	if (!r->res_lvbptr) {
@@ -657,12 +657,12 @@ void dlm_recover_rsbs(struct dlm_ls *ls)
 	list_for_each_entry(r, &ls->ls_root_list, res_root_list) {
 		lock_rsb(r);
 		if (is_master(r)) {
-			if (test_bit(RESFL_RECOVER_CONVERT, &r->res_flags))
+			if (rsb_flag(r, RSB_RECOVER_CONVERT))
 				recover_conversion(r);
 			recover_lvb(r);
 			count++;
 		}
-		clear_bit(RESFL_RECOVER_CONVERT, &r->res_flags);
+		rsb_clear_flag(r, RSB_RECOVER_CONVERT);
 		unlock_rsb(r);
 	}
 	up_read(&ls->ls_root_sem);

--

                 reply	other threads:[~2005-07-15 10:34 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20050715103623.GH17316@redhat.com \
    --to=teigland@redhat.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.