Loading fs/dlm/ast.c +4 −5 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ void dlm_add_ast(struct dlm_lkb *lkb, int type) dlm_user_add_ast(lkb, type); return; } DLM_ASSERT(lkb->lkb_astaddr != DLM_FAKE_USER_AST, dlm_print_lkb(lkb);); spin_lock(&ast_queue_lock); if (!(lkb->lkb_ast_type & (AST_COMP | AST_BAST))) { Loading @@ -58,8 +57,8 @@ static void process_asts(void) struct dlm_ls *ls = NULL; struct dlm_rsb *r = NULL; struct dlm_lkb *lkb; void (*cast) (long param); void (*bast) (long param, int mode); void (*cast) (void *astparam); void (*bast) (void *astparam, int mode); int type = 0, found, bmode; for (;;) { Loading @@ -83,8 +82,8 @@ static void process_asts(void) if (!found) break; cast = lkb->lkb_astaddr; bast = lkb->lkb_bastaddr; cast = lkb->lkb_astfn; bast = lkb->lkb_bastfn; bmode = lkb->lkb_bastmode; if ((type & AST_COMP) && cast) Loading fs/dlm/dlm_internal.h +6 −8 Original line number Diff line number Diff line Loading @@ -92,8 +92,6 @@ do { \ } \ } #define DLM_FAKE_USER_AST ERR_PTR(-EINVAL) struct dlm_direntry { struct list_head list; Loading Loading @@ -146,9 +144,9 @@ struct dlm_recover { struct dlm_args { uint32_t flags; void *astaddr; long astparam; void *bastaddr; void (*astfn) (void *astparam); void *astparam; void (*bastfn) (void *astparam, int mode); int mode; struct dlm_lksb *lksb; unsigned long timeout; Loading Loading @@ -253,9 +251,9 @@ struct dlm_lkb { char *lkb_lvbptr; struct dlm_lksb *lkb_lksb; /* caller's status block */ void *lkb_astaddr; /* caller's ast function */ void *lkb_bastaddr; /* caller's bast function */ long lkb_astparam; /* caller's ast arg */ void (*lkb_astfn) (void *astparam); void (*lkb_bastfn) (void *astparam, int mode); void *lkb_astparam; /* caller's ast arg */ }; Loading fs/dlm/lock.c +32 −18 Original line number Diff line number Diff line Loading @@ -1781,7 +1781,7 @@ static void grant_pending_locks(struct dlm_rsb *r) */ list_for_each_entry_safe(lkb, s, &r->res_grantqueue, lkb_statequeue) { if (lkb->lkb_bastaddr && lock_requires_bast(lkb, high, cw)) { if (lkb->lkb_bastfn && lock_requires_bast(lkb, high, cw)) { if (cw && high == DLM_LOCK_PR) queue_bast(r, lkb, DLM_LOCK_CW); else Loading Loading @@ -1811,7 +1811,7 @@ static void send_bast_queue(struct dlm_rsb *r, struct list_head *head, struct dlm_lkb *gr; list_for_each_entry(gr, head, lkb_statequeue) { if (gr->lkb_bastaddr && modes_require_bast(gr, lkb)) { if (gr->lkb_bastfn && modes_require_bast(gr, lkb)) { queue_bast(r, gr, lkb->lkb_rqmode); gr->lkb_highbast = lkb->lkb_rqmode; } Loading Loading @@ -1966,8 +1966,11 @@ static void confirm_master(struct dlm_rsb *r, int error) } static int set_lock_args(int mode, struct dlm_lksb *lksb, uint32_t flags, int namelen, unsigned long timeout_cs, void *ast, void *astarg, void *bast, struct dlm_args *args) int namelen, unsigned long timeout_cs, void (*ast) (void *astparam), void *astparam, void (*bast) (void *astparam, int mode), struct dlm_args *args) { int rv = -EINVAL; Loading Loading @@ -2017,9 +2020,9 @@ static int set_lock_args(int mode, struct dlm_lksb *lksb, uint32_t flags, an active lkb cannot be modified before locking the rsb */ args->flags = flags; args->astaddr = ast; args->astparam = (long) astarg; args->bastaddr = bast; args->astfn = ast; args->astparam = astparam; args->bastfn = bast; args->timeout = timeout_cs; args->mode = mode; args->lksb = lksb; Loading @@ -2038,7 +2041,7 @@ static int set_unlock_args(uint32_t flags, void *astarg, struct dlm_args *args) return -EINVAL; args->flags = flags; args->astparam = (long) astarg; args->astparam = astarg; return 0; } Loading Loading @@ -2068,9 +2071,9 @@ static int validate_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb->lkb_exflags = args->flags; lkb->lkb_sbflags = 0; lkb->lkb_astaddr = args->astaddr; lkb->lkb_astfn = args->astfn; lkb->lkb_astparam = args->astparam; lkb->lkb_bastaddr = args->bastaddr; lkb->lkb_bastfn = args->bastfn; lkb->lkb_rqmode = args->mode; lkb->lkb_lksb = args->lksb; lkb->lkb_lvbptr = args->lksb->sb_lvbptr; Loading Loading @@ -2717,9 +2720,9 @@ static void send_args(struct dlm_rsb *r, struct dlm_lkb *lkb, /* m_result and m_bastmode are set from function args, not from lkb fields */ if (lkb->lkb_bastaddr) if (lkb->lkb_bastfn) ms->m_asts |= AST_BAST; if (lkb->lkb_astaddr) if (lkb->lkb_astfn) ms->m_asts |= AST_COMP; /* compare with switch in create_message; send_remove() doesn't Loading Loading @@ -3002,6 +3005,16 @@ static int receive_lvb(struct dlm_ls *ls, struct dlm_lkb *lkb, return 0; } static void fake_bastfn(void *astparam, int mode) { log_print("fake_bastfn should not be called"); } static void fake_astfn(void *astparam) { log_print("fake_astfn should not be called"); } static int receive_request_args(struct dlm_ls *ls, struct dlm_lkb *lkb, struct dlm_message *ms) { Loading @@ -3010,8 +3023,9 @@ static int receive_request_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb->lkb_remid = ms->m_lkid; lkb->lkb_grmode = DLM_LOCK_IV; lkb->lkb_rqmode = ms->m_rqmode; lkb->lkb_bastaddr = (void *) (long) (ms->m_asts & AST_BAST); lkb->lkb_astaddr = (void *) (long) (ms->m_asts & AST_COMP); lkb->lkb_bastfn = (ms->m_asts & AST_BAST) ? &fake_bastfn : NULL; lkb->lkb_astfn = (ms->m_asts & AST_COMP) ? &fake_astfn : NULL; if (lkb->lkb_exflags & DLM_LKF_VALBLK) { /* lkb was just created so there won't be an lvb yet */ Loading Loading @@ -4291,8 +4305,8 @@ static int receive_rcom_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb->lkb_grmode = rl->rl_grmode; /* don't set lkb_status because add_lkb wants to itself */ lkb->lkb_bastaddr = (void *) (long) (rl->rl_asts & AST_BAST); lkb->lkb_astaddr = (void *) (long) (rl->rl_asts & AST_COMP); lkb->lkb_bastfn = (rl->rl_asts & AST_BAST) ? &fake_bastfn : NULL; lkb->lkb_astfn = (rl->rl_asts & AST_COMP) ? &fake_astfn : NULL; if (lkb->lkb_exflags & DLM_LKF_VALBLK) { int lvblen = rc->rc_header.h_length - sizeof(struct dlm_rcom) - Loading Loading @@ -4466,7 +4480,7 @@ int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua, lock and that lkb_astparam is the dlm_user_args structure. */ error = set_lock_args(mode, &ua->lksb, flags, namelen, timeout_cs, DLM_FAKE_USER_AST, ua, DLM_FAKE_USER_AST, &args); fake_astfn, ua, fake_bastfn, &args); lkb->lkb_flags |= DLM_IFL_USER; ua->old_mode = DLM_LOCK_IV; Loading Loading @@ -4540,7 +4554,7 @@ int dlm_user_convert(struct dlm_ls *ls, struct dlm_user_args *ua_tmp, ua->old_mode = lkb->lkb_grmode; error = set_lock_args(mode, &ua->lksb, flags, 0, timeout_cs, DLM_FAKE_USER_AST, ua, DLM_FAKE_USER_AST, &args); fake_astfn, ua, fake_bastfn, &args); if (error) goto out_put; Loading fs/dlm/rcom.c +2 −2 Original line number Diff line number Diff line Loading @@ -318,9 +318,9 @@ static void pack_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb, rl->rl_status = lkb->lkb_status; rl->rl_wait_type = cpu_to_le16(lkb->lkb_wait_type); if (lkb->lkb_bastaddr) if (lkb->lkb_bastfn) rl->rl_asts |= AST_BAST; if (lkb->lkb_astaddr) if (lkb->lkb_astfn) rl->rl_asts |= AST_COMP; rl->rl_namelen = cpu_to_le16(r->res_length); Loading Loading
fs/dlm/ast.c +4 −5 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ void dlm_add_ast(struct dlm_lkb *lkb, int type) dlm_user_add_ast(lkb, type); return; } DLM_ASSERT(lkb->lkb_astaddr != DLM_FAKE_USER_AST, dlm_print_lkb(lkb);); spin_lock(&ast_queue_lock); if (!(lkb->lkb_ast_type & (AST_COMP | AST_BAST))) { Loading @@ -58,8 +57,8 @@ static void process_asts(void) struct dlm_ls *ls = NULL; struct dlm_rsb *r = NULL; struct dlm_lkb *lkb; void (*cast) (long param); void (*bast) (long param, int mode); void (*cast) (void *astparam); void (*bast) (void *astparam, int mode); int type = 0, found, bmode; for (;;) { Loading @@ -83,8 +82,8 @@ static void process_asts(void) if (!found) break; cast = lkb->lkb_astaddr; bast = lkb->lkb_bastaddr; cast = lkb->lkb_astfn; bast = lkb->lkb_bastfn; bmode = lkb->lkb_bastmode; if ((type & AST_COMP) && cast) Loading
fs/dlm/dlm_internal.h +6 −8 Original line number Diff line number Diff line Loading @@ -92,8 +92,6 @@ do { \ } \ } #define DLM_FAKE_USER_AST ERR_PTR(-EINVAL) struct dlm_direntry { struct list_head list; Loading Loading @@ -146,9 +144,9 @@ struct dlm_recover { struct dlm_args { uint32_t flags; void *astaddr; long astparam; void *bastaddr; void (*astfn) (void *astparam); void *astparam; void (*bastfn) (void *astparam, int mode); int mode; struct dlm_lksb *lksb; unsigned long timeout; Loading Loading @@ -253,9 +251,9 @@ struct dlm_lkb { char *lkb_lvbptr; struct dlm_lksb *lkb_lksb; /* caller's status block */ void *lkb_astaddr; /* caller's ast function */ void *lkb_bastaddr; /* caller's bast function */ long lkb_astparam; /* caller's ast arg */ void (*lkb_astfn) (void *astparam); void (*lkb_bastfn) (void *astparam, int mode); void *lkb_astparam; /* caller's ast arg */ }; Loading
fs/dlm/lock.c +32 −18 Original line number Diff line number Diff line Loading @@ -1781,7 +1781,7 @@ static void grant_pending_locks(struct dlm_rsb *r) */ list_for_each_entry_safe(lkb, s, &r->res_grantqueue, lkb_statequeue) { if (lkb->lkb_bastaddr && lock_requires_bast(lkb, high, cw)) { if (lkb->lkb_bastfn && lock_requires_bast(lkb, high, cw)) { if (cw && high == DLM_LOCK_PR) queue_bast(r, lkb, DLM_LOCK_CW); else Loading Loading @@ -1811,7 +1811,7 @@ static void send_bast_queue(struct dlm_rsb *r, struct list_head *head, struct dlm_lkb *gr; list_for_each_entry(gr, head, lkb_statequeue) { if (gr->lkb_bastaddr && modes_require_bast(gr, lkb)) { if (gr->lkb_bastfn && modes_require_bast(gr, lkb)) { queue_bast(r, gr, lkb->lkb_rqmode); gr->lkb_highbast = lkb->lkb_rqmode; } Loading Loading @@ -1966,8 +1966,11 @@ static void confirm_master(struct dlm_rsb *r, int error) } static int set_lock_args(int mode, struct dlm_lksb *lksb, uint32_t flags, int namelen, unsigned long timeout_cs, void *ast, void *astarg, void *bast, struct dlm_args *args) int namelen, unsigned long timeout_cs, void (*ast) (void *astparam), void *astparam, void (*bast) (void *astparam, int mode), struct dlm_args *args) { int rv = -EINVAL; Loading Loading @@ -2017,9 +2020,9 @@ static int set_lock_args(int mode, struct dlm_lksb *lksb, uint32_t flags, an active lkb cannot be modified before locking the rsb */ args->flags = flags; args->astaddr = ast; args->astparam = (long) astarg; args->bastaddr = bast; args->astfn = ast; args->astparam = astparam; args->bastfn = bast; args->timeout = timeout_cs; args->mode = mode; args->lksb = lksb; Loading @@ -2038,7 +2041,7 @@ static int set_unlock_args(uint32_t flags, void *astarg, struct dlm_args *args) return -EINVAL; args->flags = flags; args->astparam = (long) astarg; args->astparam = astarg; return 0; } Loading Loading @@ -2068,9 +2071,9 @@ static int validate_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb->lkb_exflags = args->flags; lkb->lkb_sbflags = 0; lkb->lkb_astaddr = args->astaddr; lkb->lkb_astfn = args->astfn; lkb->lkb_astparam = args->astparam; lkb->lkb_bastaddr = args->bastaddr; lkb->lkb_bastfn = args->bastfn; lkb->lkb_rqmode = args->mode; lkb->lkb_lksb = args->lksb; lkb->lkb_lvbptr = args->lksb->sb_lvbptr; Loading Loading @@ -2717,9 +2720,9 @@ static void send_args(struct dlm_rsb *r, struct dlm_lkb *lkb, /* m_result and m_bastmode are set from function args, not from lkb fields */ if (lkb->lkb_bastaddr) if (lkb->lkb_bastfn) ms->m_asts |= AST_BAST; if (lkb->lkb_astaddr) if (lkb->lkb_astfn) ms->m_asts |= AST_COMP; /* compare with switch in create_message; send_remove() doesn't Loading Loading @@ -3002,6 +3005,16 @@ static int receive_lvb(struct dlm_ls *ls, struct dlm_lkb *lkb, return 0; } static void fake_bastfn(void *astparam, int mode) { log_print("fake_bastfn should not be called"); } static void fake_astfn(void *astparam) { log_print("fake_astfn should not be called"); } static int receive_request_args(struct dlm_ls *ls, struct dlm_lkb *lkb, struct dlm_message *ms) { Loading @@ -3010,8 +3023,9 @@ static int receive_request_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb->lkb_remid = ms->m_lkid; lkb->lkb_grmode = DLM_LOCK_IV; lkb->lkb_rqmode = ms->m_rqmode; lkb->lkb_bastaddr = (void *) (long) (ms->m_asts & AST_BAST); lkb->lkb_astaddr = (void *) (long) (ms->m_asts & AST_COMP); lkb->lkb_bastfn = (ms->m_asts & AST_BAST) ? &fake_bastfn : NULL; lkb->lkb_astfn = (ms->m_asts & AST_COMP) ? &fake_astfn : NULL; if (lkb->lkb_exflags & DLM_LKF_VALBLK) { /* lkb was just created so there won't be an lvb yet */ Loading Loading @@ -4291,8 +4305,8 @@ static int receive_rcom_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb->lkb_grmode = rl->rl_grmode; /* don't set lkb_status because add_lkb wants to itself */ lkb->lkb_bastaddr = (void *) (long) (rl->rl_asts & AST_BAST); lkb->lkb_astaddr = (void *) (long) (rl->rl_asts & AST_COMP); lkb->lkb_bastfn = (rl->rl_asts & AST_BAST) ? &fake_bastfn : NULL; lkb->lkb_astfn = (rl->rl_asts & AST_COMP) ? &fake_astfn : NULL; if (lkb->lkb_exflags & DLM_LKF_VALBLK) { int lvblen = rc->rc_header.h_length - sizeof(struct dlm_rcom) - Loading Loading @@ -4466,7 +4480,7 @@ int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua, lock and that lkb_astparam is the dlm_user_args structure. */ error = set_lock_args(mode, &ua->lksb, flags, namelen, timeout_cs, DLM_FAKE_USER_AST, ua, DLM_FAKE_USER_AST, &args); fake_astfn, ua, fake_bastfn, &args); lkb->lkb_flags |= DLM_IFL_USER; ua->old_mode = DLM_LOCK_IV; Loading Loading @@ -4540,7 +4554,7 @@ int dlm_user_convert(struct dlm_ls *ls, struct dlm_user_args *ua_tmp, ua->old_mode = lkb->lkb_grmode; error = set_lock_args(mode, &ua->lksb, flags, 0, timeout_cs, DLM_FAKE_USER_AST, ua, DLM_FAKE_USER_AST, &args); fake_astfn, ua, fake_bastfn, &args); if (error) goto out_put; Loading
fs/dlm/rcom.c +2 −2 Original line number Diff line number Diff line Loading @@ -318,9 +318,9 @@ static void pack_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb, rl->rl_status = lkb->lkb_status; rl->rl_wait_type = cpu_to_le16(lkb->lkb_wait_type); if (lkb->lkb_bastaddr) if (lkb->lkb_bastfn) rl->rl_asts |= AST_BAST; if (lkb->lkb_astaddr) if (lkb->lkb_astfn) rl->rl_asts |= AST_COMP; rl->rl_namelen = cpu_to_le16(r->res_length); Loading