Skip to content

Commit 9f48eea

Browse files
Alexander Aringteigland
authored andcommitted
fs: dlm: remove DLM_IFL_LOCAL_MS flag
The DLM_IFL_LOCAL_MS flag is an internal non shared flag but used in m_flags of dlm messages. It is not shared because it is only used for local messaging. Instead using DLM_IFL_LOCAL_MS in dlm messages we pass a parameter around to signal local messaging or not. This patch is adding the local parameter to signal local messaging. Signed-off-by: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
1 parent a7e7ffa commit 9f48eea

3 files changed

Lines changed: 33 additions & 34 deletions

File tree

fs/dlm/dlm_internal.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ struct dlm_args {
203203
#define DLM_IFL_OVERLAP_CANCEL 0x00100000
204204
#define DLM_IFL_ENDOFLIFE 0x00200000
205205
#define DLM_IFL_DEADLOCK_CANCEL 0x01000000
206-
#define DLM_IFL_LOCAL_MS 0x02000000 /* magic number for m_flags */
207206

208207
#define DLM_IFL_CB_PENDING_BIT 0
209208

fs/dlm/lock.c

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ static int send_remove(struct dlm_rsb *r);
8686
static int _request_lock(struct dlm_rsb *r, struct dlm_lkb *lkb);
8787
static int _cancel_lock(struct dlm_rsb *r, struct dlm_lkb *lkb);
8888
static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
89-
struct dlm_message *ms);
89+
struct dlm_message *ms, bool local);
9090
static int receive_extralen(struct dlm_message *ms);
9191
static void do_purge(struct dlm_ls *ls, int nodeid, int pid);
9292
static void toss_rsb(struct kref *kref);
@@ -1561,15 +1561,16 @@ static int remove_from_waiters(struct dlm_lkb *lkb, int mstype)
15611561
/* Handles situations where we might be processing a "fake" or "local" reply in
15621562
which we can't try to take waiters_mutex again. */
15631563

1564-
static int remove_from_waiters_ms(struct dlm_lkb *lkb, struct dlm_message *ms)
1564+
static int remove_from_waiters_ms(struct dlm_lkb *lkb, struct dlm_message *ms,
1565+
bool local)
15651566
{
15661567
struct dlm_ls *ls = lkb->lkb_resource->res_ls;
15671568
int error;
15681569

1569-
if (ms->m_flags != cpu_to_le32(DLM_IFL_LOCAL_MS))
1570+
if (!local)
15701571
mutex_lock(&ls->ls_waiters_mutex);
15711572
error = _remove_from_waiters(lkb, le32_to_cpu(ms->m_type), ms);
1572-
if (ms->m_flags != cpu_to_le32(DLM_IFL_LOCAL_MS))
1573+
if (!local)
15731574
mutex_unlock(&ls->ls_waiters_mutex);
15741575
return error;
15751576
}
@@ -3486,10 +3487,9 @@ static int send_convert(struct dlm_rsb *r, struct dlm_lkb *lkb)
34863487
/* down conversions go without a reply from the master */
34873488
if (!error && down_conversion(lkb)) {
34883489
remove_from_waiters(lkb, DLM_MSG_CONVERT_REPLY);
3489-
r->res_ls->ls_local_ms.m_flags = cpu_to_le32(DLM_IFL_LOCAL_MS);
34903490
r->res_ls->ls_local_ms.m_type = cpu_to_le32(DLM_MSG_CONVERT_REPLY);
34913491
r->res_ls->ls_local_ms.m_result = 0;
3492-
__receive_convert_reply(r, lkb, &r->res_ls->ls_local_ms);
3492+
__receive_convert_reply(r, lkb, &r->res_ls->ls_local_ms, true);
34933493
}
34943494

34953495
return error;
@@ -3679,9 +3679,10 @@ static void receive_flags(struct dlm_lkb *lkb, struct dlm_message *ms)
36793679
(le32_to_cpu(ms->m_flags) & 0x0000FFFF);
36803680
}
36813681

3682-
static void receive_flags_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
3682+
static void receive_flags_reply(struct dlm_lkb *lkb, struct dlm_message *ms,
3683+
bool local)
36833684
{
3684-
if (ms->m_flags == cpu_to_le32(DLM_IFL_LOCAL_MS))
3685+
if (local)
36853686
return;
36863687

36873688
lkb->lkb_sbflags = le32_to_cpu(ms->m_sbflags);
@@ -4074,7 +4075,7 @@ static int receive_grant(struct dlm_ls *ls, struct dlm_message *ms)
40744075
if (error)
40754076
goto out;
40764077

4077-
receive_flags_reply(lkb, ms);
4078+
receive_flags_reply(lkb, ms, false);
40784079
if (is_altmode(lkb))
40794080
munge_altmode(lkb, ms);
40804081
grant_lock_pc(r, lkb, ms);
@@ -4278,7 +4279,7 @@ static int receive_request_reply(struct dlm_ls *ls, struct dlm_message *ms)
42784279
case -EINPROGRESS:
42794280
case 0:
42804281
/* request was queued or granted on remote master */
4281-
receive_flags_reply(lkb, ms);
4282+
receive_flags_reply(lkb, ms, false);
42824283
lkb->lkb_remid = le32_to_cpu(ms->m_lkid);
42834284
if (is_altmode(lkb))
42844285
munge_altmode(lkb, ms);
@@ -4348,7 +4349,7 @@ static int receive_request_reply(struct dlm_ls *ls, struct dlm_message *ms)
43484349
}
43494350

43504351
static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
4351-
struct dlm_message *ms)
4352+
struct dlm_message *ms, bool local)
43524353
{
43534354
/* this is the value returned from do_convert() on the master */
43544355
switch (from_dlm_errno(le32_to_cpu(ms->m_result))) {
@@ -4358,14 +4359,14 @@ static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
43584359
break;
43594360

43604361
case -EDEADLK:
4361-
receive_flags_reply(lkb, ms);
4362+
receive_flags_reply(lkb, ms, local);
43624363
revert_lock_pc(r, lkb);
43634364
queue_cast(r, lkb, -EDEADLK);
43644365
break;
43654366

43664367
case -EINPROGRESS:
43674368
/* convert was queued on remote master */
4368-
receive_flags_reply(lkb, ms);
4369+
receive_flags_reply(lkb, ms, local);
43694370
if (is_demoted(lkb))
43704371
munge_demoted(lkb);
43714372
del_lkb(r, lkb);
@@ -4374,7 +4375,7 @@ static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
43744375

43754376
case 0:
43764377
/* convert was granted on remote master */
4377-
receive_flags_reply(lkb, ms);
4378+
receive_flags_reply(lkb, ms, local);
43784379
if (is_demoted(lkb))
43794380
munge_demoted(lkb);
43804381
grant_lock_pc(r, lkb, ms);
@@ -4391,7 +4392,8 @@ static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
43914392
}
43924393
}
43934394

4394-
static void _receive_convert_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
4395+
static void _receive_convert_reply(struct dlm_lkb *lkb, struct dlm_message *ms,
4396+
bool local)
43954397
{
43964398
struct dlm_rsb *r = lkb->lkb_resource;
43974399
int error;
@@ -4404,11 +4406,11 @@ static void _receive_convert_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
44044406
goto out;
44054407

44064408
/* local reply can happen with waiters_mutex held */
4407-
error = remove_from_waiters_ms(lkb, ms);
4409+
error = remove_from_waiters_ms(lkb, ms, local);
44084410
if (error)
44094411
goto out;
44104412

4411-
__receive_convert_reply(r, lkb, ms);
4413+
__receive_convert_reply(r, lkb, ms, local);
44124414
out:
44134415
unlock_rsb(r);
44144416
put_rsb(r);
@@ -4423,12 +4425,13 @@ static int receive_convert_reply(struct dlm_ls *ls, struct dlm_message *ms)
44234425
if (error)
44244426
return error;
44254427

4426-
_receive_convert_reply(lkb, ms);
4428+
_receive_convert_reply(lkb, ms, false);
44274429
dlm_put_lkb(lkb);
44284430
return 0;
44294431
}
44304432

4431-
static void _receive_unlock_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
4433+
static void _receive_unlock_reply(struct dlm_lkb *lkb, struct dlm_message *ms,
4434+
bool local)
44324435
{
44334436
struct dlm_rsb *r = lkb->lkb_resource;
44344437
int error;
@@ -4441,15 +4444,15 @@ static void _receive_unlock_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
44414444
goto out;
44424445

44434446
/* local reply can happen with waiters_mutex held */
4444-
error = remove_from_waiters_ms(lkb, ms);
4447+
error = remove_from_waiters_ms(lkb, ms, local);
44454448
if (error)
44464449
goto out;
44474450

44484451
/* this is the value returned from do_unlock() on the master */
44494452

44504453
switch (from_dlm_errno(le32_to_cpu(ms->m_result))) {
44514454
case -DLM_EUNLOCK:
4452-
receive_flags_reply(lkb, ms);
4455+
receive_flags_reply(lkb, ms, local);
44534456
remove_lock_pc(r, lkb);
44544457
queue_cast(r, lkb, -DLM_EUNLOCK);
44554458
break;
@@ -4473,12 +4476,13 @@ static int receive_unlock_reply(struct dlm_ls *ls, struct dlm_message *ms)
44734476
if (error)
44744477
return error;
44754478

4476-
_receive_unlock_reply(lkb, ms);
4479+
_receive_unlock_reply(lkb, ms, false);
44774480
dlm_put_lkb(lkb);
44784481
return 0;
44794482
}
44804483

4481-
static void _receive_cancel_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
4484+
static void _receive_cancel_reply(struct dlm_lkb *lkb, struct dlm_message *ms,
4485+
bool local)
44824486
{
44834487
struct dlm_rsb *r = lkb->lkb_resource;
44844488
int error;
@@ -4491,15 +4495,15 @@ static void _receive_cancel_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
44914495
goto out;
44924496

44934497
/* local reply can happen with waiters_mutex held */
4494-
error = remove_from_waiters_ms(lkb, ms);
4498+
error = remove_from_waiters_ms(lkb, ms, local);
44954499
if (error)
44964500
goto out;
44974501

44984502
/* this is the value returned from do_cancel() on the master */
44994503

45004504
switch (from_dlm_errno(le32_to_cpu(ms->m_result))) {
45014505
case -DLM_ECANCEL:
4502-
receive_flags_reply(lkb, ms);
4506+
receive_flags_reply(lkb, ms, local);
45034507
revert_lock_pc(r, lkb);
45044508
queue_cast(r, lkb, -DLM_ECANCEL);
45054509
break;
@@ -4524,7 +4528,7 @@ static int receive_cancel_reply(struct dlm_ls *ls, struct dlm_message *ms)
45244528
if (error)
45254529
return error;
45264530

4527-
_receive_cancel_reply(lkb, ms);
4531+
_receive_cancel_reply(lkb, ms, false);
45284532
dlm_put_lkb(lkb);
45294533
return 0;
45304534
}
@@ -4839,11 +4843,10 @@ static void recover_convert_waiter(struct dlm_ls *ls, struct dlm_lkb *lkb,
48394843
if (middle_conversion(lkb)) {
48404844
hold_lkb(lkb);
48414845
memset(ms_local, 0, sizeof(struct dlm_message));
4842-
ms_local->m_flags = cpu_to_le32(DLM_IFL_LOCAL_MS);
48434846
ms_local->m_type = cpu_to_le32(DLM_MSG_CONVERT_REPLY);
48444847
ms_local->m_result = cpu_to_le32(to_dlm_errno(-EINPROGRESS));
48454848
ms_local->m_header.h_nodeid = cpu_to_le32(lkb->lkb_nodeid);
4846-
_receive_convert_reply(lkb, ms_local);
4849+
_receive_convert_reply(lkb, ms_local, true);
48474850

48484851
/* Same special case as in receive_rcom_lock_args() */
48494852
lkb->lkb_grmode = DLM_LOCK_IV;
@@ -4961,22 +4964,20 @@ void dlm_recover_waiters_pre(struct dlm_ls *ls)
49614964
case DLM_MSG_UNLOCK:
49624965
hold_lkb(lkb);
49634966
memset(ms_local, 0, sizeof(struct dlm_message));
4964-
ms_local->m_flags = cpu_to_le32(DLM_IFL_LOCAL_MS);
49654967
ms_local->m_type = cpu_to_le32(DLM_MSG_UNLOCK_REPLY);
49664968
ms_local->m_result = cpu_to_le32(to_dlm_errno(local_unlock_result));
49674969
ms_local->m_header.h_nodeid = cpu_to_le32(lkb->lkb_nodeid);
4968-
_receive_unlock_reply(lkb, ms_local);
4970+
_receive_unlock_reply(lkb, ms_local, true);
49694971
dlm_put_lkb(lkb);
49704972
break;
49714973

49724974
case DLM_MSG_CANCEL:
49734975
hold_lkb(lkb);
49744976
memset(ms_local, 0, sizeof(struct dlm_message));
4975-
ms_local->m_flags = cpu_to_le32(DLM_IFL_LOCAL_MS);
49764977
ms_local->m_type = cpu_to_le32(DLM_MSG_CANCEL_REPLY);
49774978
ms_local->m_result = cpu_to_le32(to_dlm_errno(local_cancel_result));
49784979
ms_local->m_header.h_nodeid = cpu_to_le32(lkb->lkb_nodeid);
4979-
_receive_cancel_reply(lkb, ms_local);
4980+
_receive_cancel_reply(lkb, ms_local, true);
49804981
dlm_put_lkb(lkb);
49814982
break;
49824983

include/trace/events/dlm.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
{ DLM_IFL_OVERLAP_CANCEL, "OVERLAP_CANCEL" }, \
5555
{ DLM_IFL_ENDOFLIFE, "ENDOFLIFE" }, \
5656
{ DLM_IFL_DEADLOCK_CANCEL, "DEADLOCK_CANCEL" }, \
57-
{ DLM_IFL_LOCAL_MS, "LOCAL_MS" }, \
5857
{ DLM_IFL_USER, "USER" }, \
5958
{ DLM_IFL_ORPHAN, "ORPHAN" })
6059

0 commit comments

Comments
 (0)