提交 8f2c9c1b 编写于 作者: J Joel Becker 提交者: Mark Fasheh

ocfs2: Create the lock status block union.

Wrap the lock status block (lksb) in a union.  Later we will add a union
element for the fs/dlm lksb.  Create accessors for the status and lvb
fields.

Other than a debugging function, dlmglue.c does not directly reference
the o2dlm locking path anymore.
Signed-off-by: NJoel Becker <joel.becker@oracle.com>
Signed-off-by: NMark Fasheh <mfasheh@suse.com>
上级 7431cd7e
...@@ -112,7 +112,8 @@ static void ocfs2_dump_meta_lvb_info(u64 level, ...@@ -112,7 +112,8 @@ static void ocfs2_dump_meta_lvb_info(u64 level,
unsigned int line, unsigned int line,
struct ocfs2_lock_res *lockres) struct ocfs2_lock_res *lockres)
{ {
struct ocfs2_meta_lvb *lvb = (struct ocfs2_meta_lvb *) lockres->l_lksb.lvb; struct ocfs2_meta_lvb *lvb =
(struct ocfs2_meta_lvb *)ocfs2_dlm_lvb(&lockres->l_lksb);
mlog(level, "LVB information for %s (called from %s:%u):\n", mlog(level, "LVB information for %s (called from %s:%u):\n",
lockres->l_name, function, line); lockres->l_name, function, line);
...@@ -799,14 +800,14 @@ static void ocfs2_blocking_ast(void *opaque, int level) ...@@ -799,14 +800,14 @@ static void ocfs2_blocking_ast(void *opaque, int level)
static void ocfs2_locking_ast(void *opaque) static void ocfs2_locking_ast(void *opaque)
{ {
struct ocfs2_lock_res *lockres = opaque; struct ocfs2_lock_res *lockres = opaque;
struct dlm_lockstatus *lksb = &lockres->l_lksb;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&lockres->l_lock, flags); spin_lock_irqsave(&lockres->l_lock, flags);
if (lksb->status != DLM_NORMAL) { if (ocfs2_dlm_lock_status(&lockres->l_lksb)) {
mlog(ML_ERROR, "lockres %s: lksb status value of %u!\n", mlog(ML_ERROR, "lockres %s: lksb status value of %d!\n",
lockres->l_name, lksb->status); lockres->l_name,
ocfs2_dlm_lock_status(&lockres->l_lksb));
spin_unlock_irqrestore(&lockres->l_lock, flags); spin_unlock_irqrestore(&lockres->l_lock, flags);
return; return;
} }
...@@ -1634,7 +1635,7 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode) ...@@ -1634,7 +1635,7 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode)
mlog_entry_void(); mlog_entry_void();
lvb = (struct ocfs2_meta_lvb *) lockres->l_lksb.lvb; lvb = (struct ocfs2_meta_lvb *)ocfs2_dlm_lvb(&lockres->l_lksb);
/* /*
* Invalidate the LVB of a deleted inode - this way other * Invalidate the LVB of a deleted inode - this way other
...@@ -1686,7 +1687,7 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode) ...@@ -1686,7 +1687,7 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
mlog_meta_lvb(0, lockres); mlog_meta_lvb(0, lockres);
lvb = (struct ocfs2_meta_lvb *) lockres->l_lksb.lvb; lvb = (struct ocfs2_meta_lvb *)ocfs2_dlm_lvb(&lockres->l_lksb);
/* We're safe here without the lockres lock... */ /* We're safe here without the lockres lock... */
spin_lock(&oi->ip_lock); spin_lock(&oi->ip_lock);
...@@ -1721,7 +1722,8 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode) ...@@ -1721,7 +1722,8 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
static inline int ocfs2_meta_lvb_is_trustable(struct inode *inode, static inline int ocfs2_meta_lvb_is_trustable(struct inode *inode,
struct ocfs2_lock_res *lockres) struct ocfs2_lock_res *lockres)
{ {
struct ocfs2_meta_lvb *lvb = (struct ocfs2_meta_lvb *) lockres->l_lksb.lvb; struct ocfs2_meta_lvb *lvb =
(struct ocfs2_meta_lvb *)ocfs2_dlm_lvb(&lockres->l_lksb);
if (lvb->lvb_version == OCFS2_LVB_VERSION if (lvb->lvb_version == OCFS2_LVB_VERSION
&& be32_to_cpu(lvb->lvb_igeneration) == inode->i_generation) && be32_to_cpu(lvb->lvb_igeneration) == inode->i_generation)
...@@ -2379,7 +2381,7 @@ static int ocfs2_dlm_seq_show(struct seq_file *m, void *v) ...@@ -2379,7 +2381,7 @@ static int ocfs2_dlm_seq_show(struct seq_file *m, void *v)
lockres->l_blocking); lockres->l_blocking);
/* Dump the raw LVB */ /* Dump the raw LVB */
lvb = lockres->l_lksb.lvb; lvb = ocfs2_dlm_lvb(&lockres->l_lksb);
for(i = 0; i < DLM_LVB_LEN; i++) for(i = 0; i < DLM_LVB_LEN; i++)
seq_printf(m, "0x%x\t", lvb[i]); seq_printf(m, "0x%x\t", lvb[i]);
...@@ -2692,7 +2694,8 @@ static int ocfs2_drop_lock(struct ocfs2_super *osb, ...@@ -2692,7 +2694,8 @@ static int ocfs2_drop_lock(struct ocfs2_super *osb,
if (ret) { if (ret) {
ocfs2_log_dlm_error("ocfs2_dlm_unlock", ret, lockres); ocfs2_log_dlm_error("ocfs2_dlm_unlock", ret, lockres);
mlog(ML_ERROR, "lockres flags: %lu\n", lockres->l_flags); mlog(ML_ERROR, "lockres flags: %lu\n", lockres->l_flags);
dlm_print_one_lock(lockres->l_lksb.lockid); /* XXX Need to abstract this */
dlm_print_one_lock(lockres->l_lksb.lksb_o2dlm.lockid);
BUG(); BUG();
} }
mlog(0, "lock %s, successfull return from ocfs2_dlm_unlock\n", mlog(0, "lock %s, successfull return from ocfs2_dlm_unlock\n",
......
...@@ -40,7 +40,8 @@ ...@@ -40,7 +40,8 @@
#include "cluster/heartbeat.h" #include "cluster/heartbeat.h"
#include "cluster/tcp.h" #include "cluster/tcp.h"
#include "dlm/dlmapi.h" /* For union ocfs2_dlm_lksb */
#include "stackglue.h"
#include "ocfs2_fs.h" #include "ocfs2_fs.h"
#include "ocfs2_lockid.h" #include "ocfs2_lockid.h"
...@@ -120,7 +121,7 @@ struct ocfs2_lock_res { ...@@ -120,7 +121,7 @@ struct ocfs2_lock_res {
int l_level; int l_level;
unsigned int l_ro_holders; unsigned int l_ro_holders;
unsigned int l_ex_holders; unsigned int l_ex_holders;
struct dlm_lockstatus l_lksb; union ocfs2_dlm_lksb l_lksb;
/* used from AST/BAST funcs. */ /* used from AST/BAST funcs. */
enum ocfs2_ast_action l_action; enum ocfs2_ast_action l_action;
......
...@@ -199,7 +199,7 @@ static void o2dlm_unlock_ast_wrapper(void *astarg, enum dlm_status status) ...@@ -199,7 +199,7 @@ static void o2dlm_unlock_ast_wrapper(void *astarg, enum dlm_status status)
int ocfs2_dlm_lock(struct dlm_ctxt *dlm, int ocfs2_dlm_lock(struct dlm_ctxt *dlm,
int mode, int mode,
struct dlm_lockstatus *lksb, union ocfs2_dlm_lksb *lksb,
u32 flags, u32 flags,
void *name, void *name,
unsigned int namelen, unsigned int namelen,
...@@ -212,15 +212,16 @@ int ocfs2_dlm_lock(struct dlm_ctxt *dlm, ...@@ -212,15 +212,16 @@ int ocfs2_dlm_lock(struct dlm_ctxt *dlm,
BUG_ON(lproto == NULL); BUG_ON(lproto == NULL);
status = dlmlock(dlm, o2dlm_mode, lksb, o2dlm_flags, name, namelen, status = dlmlock(dlm, o2dlm_mode, &lksb->lksb_o2dlm, o2dlm_flags,
o2dlm_lock_ast_wrapper, astarg, name, namelen,
o2dlm_blocking_ast_wrapper); o2dlm_lock_ast_wrapper, astarg,
o2dlm_blocking_ast_wrapper);
ret = dlm_status_to_errno(status); ret = dlm_status_to_errno(status);
return ret; return ret;
} }
int ocfs2_dlm_unlock(struct dlm_ctxt *dlm, int ocfs2_dlm_unlock(struct dlm_ctxt *dlm,
struct dlm_lockstatus *lksb, union ocfs2_dlm_lksb *lksb,
u32 flags, u32 flags,
void *astarg) void *astarg)
{ {
...@@ -230,12 +231,26 @@ int ocfs2_dlm_unlock(struct dlm_ctxt *dlm, ...@@ -230,12 +231,26 @@ int ocfs2_dlm_unlock(struct dlm_ctxt *dlm,
BUG_ON(lproto == NULL); BUG_ON(lproto == NULL);
status = dlmunlock(dlm, lksb, o2dlm_flags, status = dlmunlock(dlm, &lksb->lksb_o2dlm, o2dlm_flags,
o2dlm_unlock_ast_wrapper, astarg); o2dlm_unlock_ast_wrapper, astarg);
ret = dlm_status_to_errno(status); ret = dlm_status_to_errno(status);
return ret; return ret;
} }
int ocfs2_dlm_lock_status(union ocfs2_dlm_lksb *lksb)
{
return dlm_status_to_errno(lksb->lksb_o2dlm.status);
}
/*
* Why don't we cast to ocfs2_meta_lvb? The "clean" answer is that we
* don't cast at the glue level. The real answer is that the header
* ordering is nigh impossible.
*/
void *ocfs2_dlm_lvb(union ocfs2_dlm_lksb *lksb)
{
return (void *)(lksb->lksb_o2dlm.lvb);
}
void o2cb_get_stack(struct ocfs2_locking_protocol *proto) void o2cb_get_stack(struct ocfs2_locking_protocol *proto)
{ {
......
...@@ -40,18 +40,25 @@ struct ocfs2_locking_protocol { ...@@ -40,18 +40,25 @@ struct ocfs2_locking_protocol {
void (*lp_unlock_ast)(void *astarg, int error); void (*lp_unlock_ast)(void *astarg, int error);
}; };
union ocfs2_dlm_lksb {
struct dlm_lockstatus lksb_o2dlm;
};
int ocfs2_dlm_lock(struct dlm_ctxt *dlm, int ocfs2_dlm_lock(struct dlm_ctxt *dlm,
int mode, int mode,
struct dlm_lockstatus *lksb, union ocfs2_dlm_lksb *lksb,
u32 flags, u32 flags,
void *name, void *name,
unsigned int namelen, unsigned int namelen,
void *astarg); void *astarg);
int ocfs2_dlm_unlock(struct dlm_ctxt *dlm, int ocfs2_dlm_unlock(struct dlm_ctxt *dlm,
struct dlm_lockstatus *lksb, union ocfs2_dlm_lksb *lksb,
u32 flags, u32 flags,
void *astarg); void *astarg);
int ocfs2_dlm_lock_status(union ocfs2_dlm_lksb *lksb);
void *ocfs2_dlm_lvb(union ocfs2_dlm_lksb *lksb);
void o2cb_get_stack(struct ocfs2_locking_protocol *proto); void o2cb_get_stack(struct ocfs2_locking_protocol *proto);
void o2cb_put_stack(void); void o2cb_put_stack(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册