@@ -28,7 +28,8 @@ static int rcom_response(struct dlm_ls *ls)
28
28
}
29
29
30
30
static void _create_rcom (struct dlm_ls * ls , int to_nodeid , int type , int len ,
31
- struct dlm_rcom * * rc_ret , char * mb , int mb_len )
31
+ struct dlm_rcom * * rc_ret , char * mb , int mb_len ,
32
+ uint64_t seq )
32
33
{
33
34
struct dlm_rcom * rc ;
34
35
@@ -41,16 +42,14 @@ static void _create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len,
41
42
rc -> rc_header .h_cmd = DLM_RCOM ;
42
43
43
44
rc -> rc_type = cpu_to_le32 (type );
44
-
45
- spin_lock (& ls -> ls_recover_lock );
46
- rc -> rc_seq = cpu_to_le64 (ls -> ls_recover_seq );
47
- spin_unlock (& ls -> ls_recover_lock );
45
+ rc -> rc_seq = cpu_to_le64 (seq );
48
46
49
47
* rc_ret = rc ;
50
48
}
51
49
52
50
static int create_rcom (struct dlm_ls * ls , int to_nodeid , int type , int len ,
53
- struct dlm_rcom * * rc_ret , struct dlm_mhandle * * mh_ret )
51
+ struct dlm_rcom * * rc_ret , struct dlm_mhandle * * mh_ret ,
52
+ uint64_t seq )
54
53
{
55
54
int mb_len = sizeof (struct dlm_rcom ) + len ;
56
55
struct dlm_mhandle * mh ;
@@ -63,14 +62,14 @@ static int create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len,
63
62
return - ENOBUFS ;
64
63
}
65
64
66
- _create_rcom (ls , to_nodeid , type , len , rc_ret , mb , mb_len );
65
+ _create_rcom (ls , to_nodeid , type , len , rc_ret , mb , mb_len , seq );
67
66
* mh_ret = mh ;
68
67
return 0 ;
69
68
}
70
69
71
70
static int create_rcom_stateless (struct dlm_ls * ls , int to_nodeid , int type ,
72
71
int len , struct dlm_rcom * * rc_ret ,
73
- struct dlm_msg * * msg_ret )
72
+ struct dlm_msg * * msg_ret , uint64_t seq )
74
73
{
75
74
int mb_len = sizeof (struct dlm_rcom ) + len ;
76
75
struct dlm_msg * msg ;
@@ -84,7 +83,7 @@ static int create_rcom_stateless(struct dlm_ls *ls, int to_nodeid, int type,
84
83
return - ENOBUFS ;
85
84
}
86
85
87
- _create_rcom (ls , to_nodeid , type , len , rc_ret , mb , mb_len );
86
+ _create_rcom (ls , to_nodeid , type , len , rc_ret , mb , mb_len , seq );
88
87
* msg_ret = msg ;
89
88
return 0 ;
90
89
}
@@ -170,7 +169,8 @@ static void disallow_sync_reply(struct dlm_ls *ls)
170
169
* node's rcom_config.
171
170
*/
172
171
173
- int dlm_rcom_status (struct dlm_ls * ls , int nodeid , uint32_t status_flags )
172
+ int dlm_rcom_status (struct dlm_ls * ls , int nodeid , uint32_t status_flags ,
173
+ uint64_t seq )
174
174
{
175
175
struct dlm_rcom * rc ;
176
176
struct dlm_msg * msg ;
@@ -186,7 +186,8 @@ int dlm_rcom_status(struct dlm_ls *ls, int nodeid, uint32_t status_flags)
186
186
187
187
retry :
188
188
error = create_rcom_stateless (ls , nodeid , DLM_RCOM_STATUS ,
189
- sizeof (struct rcom_status ), & rc , & msg );
189
+ sizeof (struct rcom_status ), & rc , & msg ,
190
+ seq );
190
191
if (error )
191
192
goto out ;
192
193
@@ -220,7 +221,8 @@ int dlm_rcom_status(struct dlm_ls *ls, int nodeid, uint32_t status_flags)
220
221
return error ;
221
222
}
222
223
223
- static void receive_rcom_status (struct dlm_ls * ls , struct dlm_rcom * rc_in )
224
+ static void receive_rcom_status (struct dlm_ls * ls , struct dlm_rcom * rc_in ,
225
+ uint64_t seq )
224
226
{
225
227
struct dlm_rcom * rc ;
226
228
struct rcom_status * rs ;
@@ -251,7 +253,7 @@ static void receive_rcom_status(struct dlm_ls *ls, struct dlm_rcom *rc_in)
251
253
252
254
do_create :
253
255
error = create_rcom_stateless (ls , nodeid , DLM_RCOM_STATUS_REPLY ,
254
- len , & rc , & msg );
256
+ len , & rc , & msg , seq );
255
257
if (error )
256
258
return ;
257
259
@@ -302,7 +304,8 @@ static void receive_sync_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in)
302
304
spin_unlock (& ls -> ls_rcom_spin );
303
305
}
304
306
305
- int dlm_rcom_names (struct dlm_ls * ls , int nodeid , char * last_name , int last_len )
307
+ int dlm_rcom_names (struct dlm_ls * ls , int nodeid , char * last_name ,
308
+ int last_len , uint64_t seq )
306
309
{
307
310
struct dlm_rcom * rc ;
308
311
struct dlm_msg * msg ;
@@ -312,7 +315,7 @@ int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, int last_len)
312
315
313
316
retry :
314
317
error = create_rcom_stateless (ls , nodeid , DLM_RCOM_NAMES , last_len ,
315
- & rc , & msg );
318
+ & rc , & msg , seq );
316
319
if (error )
317
320
goto out ;
318
321
memcpy (rc -> rc_buf , last_name , last_len );
@@ -330,7 +333,8 @@ int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, int last_len)
330
333
return error ;
331
334
}
332
335
333
- static void receive_rcom_names (struct dlm_ls * ls , struct dlm_rcom * rc_in )
336
+ static void receive_rcom_names (struct dlm_ls * ls , struct dlm_rcom * rc_in ,
337
+ uint64_t seq )
334
338
{
335
339
struct dlm_rcom * rc ;
336
340
int error , inlen , outlen , nodeid ;
@@ -342,7 +346,7 @@ static void receive_rcom_names(struct dlm_ls *ls, struct dlm_rcom *rc_in)
342
346
outlen = DLM_MAX_APP_BUFSIZE - sizeof (struct dlm_rcom );
343
347
344
348
error = create_rcom_stateless (ls , nodeid , DLM_RCOM_NAMES_REPLY , outlen ,
345
- & rc , & msg );
349
+ & rc , & msg , seq );
346
350
if (error )
347
351
return ;
348
352
rc -> rc_id = rc_in -> rc_id ;
@@ -353,15 +357,15 @@ static void receive_rcom_names(struct dlm_ls *ls, struct dlm_rcom *rc_in)
353
357
send_rcom_stateless (msg , rc );
354
358
}
355
359
356
- int dlm_send_rcom_lookup (struct dlm_rsb * r , int dir_nodeid )
360
+ int dlm_send_rcom_lookup (struct dlm_rsb * r , int dir_nodeid , uint64_t seq )
357
361
{
358
362
struct dlm_rcom * rc ;
359
363
struct dlm_mhandle * mh ;
360
364
struct dlm_ls * ls = r -> res_ls ;
361
365
int error ;
362
366
363
367
error = create_rcom (ls , dir_nodeid , DLM_RCOM_LOOKUP , r -> res_length ,
364
- & rc , & mh );
368
+ & rc , & mh , seq );
365
369
if (error )
366
370
goto out ;
367
371
memcpy (rc -> rc_buf , r -> res_name , r -> res_length );
@@ -372,7 +376,8 @@ int dlm_send_rcom_lookup(struct dlm_rsb *r, int dir_nodeid)
372
376
return error ;
373
377
}
374
378
375
- static void receive_rcom_lookup (struct dlm_ls * ls , struct dlm_rcom * rc_in )
379
+ static void receive_rcom_lookup (struct dlm_ls * ls , struct dlm_rcom * rc_in ,
380
+ uint64_t seq )
376
381
{
377
382
struct dlm_rcom * rc ;
378
383
struct dlm_mhandle * mh ;
@@ -387,7 +392,8 @@ static void receive_rcom_lookup(struct dlm_ls *ls, struct dlm_rcom *rc_in)
387
392
return ;
388
393
}
389
394
390
- error = create_rcom (ls , nodeid , DLM_RCOM_LOOKUP_REPLY , 0 , & rc , & mh );
395
+ error = create_rcom (ls , nodeid , DLM_RCOM_LOOKUP_REPLY , 0 , & rc , & mh ,
396
+ seq );
391
397
if (error )
392
398
return ;
393
399
@@ -437,7 +443,7 @@ static void pack_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb,
437
443
memcpy (rl -> rl_lvb , lkb -> lkb_lvbptr , r -> res_ls -> ls_lvblen );
438
444
}
439
445
440
- int dlm_send_rcom_lock (struct dlm_rsb * r , struct dlm_lkb * lkb )
446
+ int dlm_send_rcom_lock (struct dlm_rsb * r , struct dlm_lkb * lkb , uint64_t seq )
441
447
{
442
448
struct dlm_ls * ls = r -> res_ls ;
443
449
struct dlm_rcom * rc ;
@@ -448,7 +454,8 @@ int dlm_send_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
448
454
if (lkb -> lkb_lvbptr )
449
455
len += ls -> ls_lvblen ;
450
456
451
- error = create_rcom (ls , r -> res_nodeid , DLM_RCOM_LOCK , len , & rc , & mh );
457
+ error = create_rcom (ls , r -> res_nodeid , DLM_RCOM_LOCK , len , & rc , & mh ,
458
+ seq );
452
459
if (error )
453
460
goto out ;
454
461
@@ -462,7 +469,8 @@ int dlm_send_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
462
469
}
463
470
464
471
/* needs at least dlm_rcom + rcom_lock */
465
- static void receive_rcom_lock (struct dlm_ls * ls , struct dlm_rcom * rc_in )
472
+ static void receive_rcom_lock (struct dlm_ls * ls , struct dlm_rcom * rc_in ,
473
+ uint64_t seq )
466
474
{
467
475
struct dlm_rcom * rc ;
468
476
struct dlm_mhandle * mh ;
@@ -471,7 +479,7 @@ static void receive_rcom_lock(struct dlm_ls *ls, struct dlm_rcom *rc_in)
471
479
dlm_recover_master_copy (ls , rc_in );
472
480
473
481
error = create_rcom (ls , nodeid , DLM_RCOM_LOCK_REPLY ,
474
- sizeof (struct rcom_lock ), & rc , & mh );
482
+ sizeof (struct rcom_lock ), & rc , & mh , seq );
475
483
if (error )
476
484
return ;
477
485
@@ -620,21 +628,21 @@ void dlm_receive_rcom(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid)
620
628
621
629
switch (rc -> rc_type ) {
622
630
case cpu_to_le32 (DLM_RCOM_STATUS ):
623
- receive_rcom_status (ls , rc );
631
+ receive_rcom_status (ls , rc , seq );
624
632
break ;
625
633
626
634
case cpu_to_le32 (DLM_RCOM_NAMES ):
627
- receive_rcom_names (ls , rc );
635
+ receive_rcom_names (ls , rc , seq );
628
636
break ;
629
637
630
638
case cpu_to_le32 (DLM_RCOM_LOOKUP ):
631
- receive_rcom_lookup (ls , rc );
639
+ receive_rcom_lookup (ls , rc , seq );
632
640
break ;
633
641
634
642
case cpu_to_le32 (DLM_RCOM_LOCK ):
635
643
if (le16_to_cpu (rc -> rc_header .h_length ) < lock_size )
636
644
goto Eshort ;
637
- receive_rcom_lock (ls , rc );
645
+ receive_rcom_lock (ls , rc , seq );
638
646
break ;
639
647
640
648
case cpu_to_le32 (DLM_RCOM_STATUS_REPLY ):
@@ -652,7 +660,7 @@ void dlm_receive_rcom(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid)
652
660
case cpu_to_le32 (DLM_RCOM_LOCK_REPLY ):
653
661
if (le16_to_cpu (rc -> rc_header .h_length ) < lock_size )
654
662
goto Eshort ;
655
- dlm_recover_process_copy (ls , rc );
663
+ dlm_recover_process_copy (ls , rc , seq );
656
664
break ;
657
665
658
666
default :
0 commit comments