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: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
This commit is contained in:
@@ -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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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 @@
|
|||||||
#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 {
|
|||||||
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)
|
|||||||
|
|
||||||
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,
|
|||||||
|
|
||||||
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,
|
|||||||
|
|
||||||
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 {
|
|||||||
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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user