[patch 05/12] dlm: rsb flag ops with inlined functions
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 <[EMAIL PROTECTED]> 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_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 { longlkb_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 semaphoreres_sem; - unsigned long res_flags; /* RESFL_ */ + unsigned long res_flags; int res_length; /* length of rsb name */ int res_nodeid; uint32_tres_lvbseq; @@ -301,6 +287,38 @@ struct dlm_rsb { charres_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, >res_flags); +} + +static inline void rsb_clear_flag(struct dlm_rsb *r, enum rsb_flags flag) +{ + __clear_bit(flag, >res_flags); +} + +static inline int rsb_flag(struct dlm_rsb *r, enum rsb_flags flag) +{ + return test_bit(flag, >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(>res_hashchain, >ls_rsbtbl[b].list); if (r->res_nodeid == -1) { - clear_bit(RESFL_MASTER_WAIT, >res_flags); - clear_bit(RESFL_MASTER_UNCERTAIN, >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, >res_flags); - set_bit(RESFL_MASTER_UNCERTAIN, >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, >res_flags), - dlm_print_rsb(r);); - DLM_ASSERT(!test_bit(RESFL_MASTER_UNCERTAIN, >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, >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, >res_flags); + rsb_clear_flag(r, RSB_VALNOTVALID); } - if (test_bit(RESFL_VALNOTVALID, >res_flags)) +
[patch 05/12] dlm: rsb flag ops with inlined functions
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 [EMAIL PROTECTED] 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 { longlkb_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 semaphoreres_sem; - unsigned long res_flags; /* RESFL_ */ + unsigned long res_flags; int res_length; /* length of rsb name */ int res_nodeid; uint32_tres_lvbseq; @@ -301,6 +287,38 @@ struct dlm_rsb { charres_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)) +