1
2
3
4
5
6
7
8
9
10#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11
12#include <linux/fs.h>
13#include <linux/dlm.h>
14#include <linux/slab.h>
15#include <linux/types.h>
16#include <linux/delay.h>
17#include <linux/gfs2_ondisk.h>
18#include <linux/sched/signal.h>
19
20#include "incore.h"
21#include "glock.h"
22#include "util.h"
23#include "sys.h"
24#include "trace_gfs2.h"
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46static inline void gfs2_update_stats(struct gfs2_lkstats *s, unsigned index,
47 s64 sample)
48{
49 s64 delta = sample - s->stats[index];
50 s->stats[index] += (delta >> 3);
51 index++;
52 s->stats[index] += ((abs(delta) - s->stats[index]) >> 2);
53}
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72static inline void gfs2_update_reply_times(struct gfs2_glock *gl)
73{
74 struct gfs2_pcpu_lkstats *lks;
75 const unsigned gltype = gl->gl_name.ln_type;
76 unsigned index = test_bit(GLF_BLOCKING, &gl->gl_flags) ?
77 GFS2_LKS_SRTTB : GFS2_LKS_SRTT;
78 s64 rtt;
79
80 preempt_disable();
81 rtt = ktime_to_ns(ktime_sub(ktime_get_real(), gl->gl_dstamp));
82 lks = this_cpu_ptr(gl->gl_name.ln_sbd->sd_lkstats);
83 gfs2_update_stats(&gl->gl_stats, index, rtt);
84 gfs2_update_stats(&lks->lkstats[gltype], index, rtt);
85 preempt_enable();
86
87 trace_gfs2_glock_lock_time(gl, rtt);
88}
89
90
91
92
93
94
95
96
97
98
99static inline void gfs2_update_request_times(struct gfs2_glock *gl)
100{
101 struct gfs2_pcpu_lkstats *lks;
102 const unsigned gltype = gl->gl_name.ln_type;
103 ktime_t dstamp;
104 s64 irt;
105
106 preempt_disable();
107 dstamp = gl->gl_dstamp;
108 gl->gl_dstamp = ktime_get_real();
109 irt = ktime_to_ns(ktime_sub(gl->gl_dstamp, dstamp));
110 lks = this_cpu_ptr(gl->gl_name.ln_sbd->sd_lkstats);
111 gfs2_update_stats(&gl->gl_stats, GFS2_LKS_SIRT, irt);
112 gfs2_update_stats(&lks->lkstats[gltype], GFS2_LKS_SIRT, irt);
113 preempt_enable();
114}
115
116static void gdlm_ast(void *arg)
117{
118 struct gfs2_glock *gl = arg;
119 unsigned ret = gl->gl_state;
120
121 gfs2_update_reply_times(gl);
122 BUG_ON(gl->gl_lksb.sb_flags & DLM_SBF_DEMOTED);
123
124 if ((gl->gl_lksb.sb_flags & DLM_SBF_VALNOTVALID) && gl->gl_lksb.sb_lvbptr)
125 memset(gl->gl_lksb.sb_lvbptr, 0, GDLM_LVB_SIZE);
126
127 switch (gl->gl_lksb.sb_status) {
128 case -DLM_EUNLOCK:
129 gfs2_glock_free(gl);
130 return;
131 case -DLM_ECANCEL:
132 ret |= LM_OUT_CANCELED;
133 goto out;
134 case -EAGAIN:
135 case -EDEADLK:
136 goto out;
137 case -ETIMEDOUT:
138 ret |= LM_OUT_ERROR;
139 goto out;
140 case 0:
141 break;
142 default:
143 BUG();
144 }
145
146 ret = gl->gl_req;
147 if (gl->gl_lksb.sb_flags & DLM_SBF_ALTMODE) {
148 if (gl->gl_req == LM_ST_SHARED)
149 ret = LM_ST_DEFERRED;
150 else if (gl->gl_req == LM_ST_DEFERRED)
151 ret = LM_ST_SHARED;
152 else
153 BUG();
154 }
155
156 set_bit(GLF_INITIAL, &gl->gl_flags);
157 gfs2_glock_complete(gl, ret);
158 return;
159out:
160 if (!test_bit(GLF_INITIAL, &gl->gl_flags))
161 gl->gl_lksb.sb_lkid = 0;
162 gfs2_glock_complete(gl, ret);
163}
164
165static void gdlm_bast(void *arg, int mode)
166{
167 struct gfs2_glock *gl = arg;
168
169 switch (mode) {
170 case DLM_LOCK_EX:
171 gfs2_glock_cb(gl, LM_ST_UNLOCKED);
172 break;
173 case DLM_LOCK_CW:
174 gfs2_glock_cb(gl, LM_ST_DEFERRED);
175 break;
176 case DLM_LOCK_PR:
177 gfs2_glock_cb(gl, LM_ST_SHARED);
178 break;
179 default:
180 fs_err(gl->gl_name.ln_sbd, "unknown bast mode %d\n", mode);
181 BUG();
182 }
183}
184
185
186
187static int make_mode(struct gfs2_sbd *sdp, const unsigned int lmstate)
188{
189 switch (lmstate) {
190 case LM_ST_UNLOCKED:
191 return DLM_LOCK_NL;
192 case LM_ST_EXCLUSIVE:
193 return DLM_LOCK_EX;
194 case LM_ST_DEFERRED:
195 return DLM_LOCK_CW;
196 case LM_ST_SHARED:
197 return DLM_LOCK_PR;
198 }
199 fs_err(sdp, "unknown LM state %d\n", lmstate);
200 BUG();
201 return -1;
202}
203
204static u32 make_flags(struct gfs2_glock *gl, const unsigned int gfs_flags,
205 const int req)
206{
207 u32 lkf = 0;
208
209 if (gl->gl_lksb.sb_lvbptr)
210 lkf |= DLM_LKF_VALBLK;
211
212 if (gfs_flags & LM_FLAG_TRY)
213 lkf |= DLM_LKF_NOQUEUE;
214
215 if (gfs_flags & LM_FLAG_TRY_1CB) {
216 lkf |= DLM_LKF_NOQUEUE;
217 lkf |= DLM_LKF_NOQUEUEBAST;
218 }
219
220 if (gfs_flags & LM_FLAG_PRIORITY) {
221 lkf |= DLM_LKF_NOORDER;
222 lkf |= DLM_LKF_HEADQUE;
223 }
224
225 if (gfs_flags & LM_FLAG_ANY) {
226 if (req == DLM_LOCK_PR)
227 lkf |= DLM_LKF_ALTCW;
228 else if (req == DLM_LOCK_CW)
229 lkf |= DLM_LKF_ALTPR;
230 else
231 BUG();
232 }
233
234 if (gl->gl_lksb.sb_lkid != 0) {
235 lkf |= DLM_LKF_CONVERT;
236 if (test_bit(GLF_BLOCKING, &gl->gl_flags))
237 lkf |= DLM_LKF_QUECVT;
238 }
239
240 return lkf;
241}
242
243static void gfs2_reverse_hex(char *c, u64 value)
244{
245 *c = '0';
246 while (value) {
247 *c-- = hex_asc[value & 0x0f];
248 value >>= 4;
249 }
250}
251
252static int gdlm_lock(struct gfs2_glock *gl, unsigned int req_state,
253 unsigned int flags)
254{
255 struct lm_lockstruct *ls = &gl->gl_name.ln_sbd->sd_lockstruct;
256 int req;
257 u32 lkf;
258 char strname[GDLM_STRNAME_BYTES] = "";
259
260 req = make_mode(gl->gl_name.ln_sbd, req_state);
261 lkf = make_flags(gl, flags, req);
262 gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT);
263 gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT);
264 if (gl->gl_lksb.sb_lkid) {
265 gfs2_update_request_times(gl);
266 } else {
267 memset(strname, ' ', GDLM_STRNAME_BYTES - 1);
268 strname[GDLM_STRNAME_BYTES - 1] = '\0';
269 gfs2_reverse_hex(strname + 7, gl->gl_name.ln_type);
270 gfs2_reverse_hex(strname + 23, gl->gl_name.ln_number);
271 gl->gl_dstamp = ktime_get_real();
272 }
273
274
275
276
277 return dlm_lock(ls->ls_dlm, req, &gl->gl_lksb, lkf, strname,
278 GDLM_STRNAME_BYTES - 1, 0, gdlm_ast, gl, gdlm_bast);
279}
280
281static void gdlm_put_lock(struct gfs2_glock *gl)
282{
283 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
284 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
285 int lvb_needs_unlock = 0;
286 int error;
287
288 if (gl->gl_lksb.sb_lkid == 0) {
289 gfs2_glock_free(gl);
290 return;
291 }
292
293 clear_bit(GLF_BLOCKING, &gl->gl_flags);
294 gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT);
295 gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT);
296 gfs2_update_request_times(gl);
297
298
299
300 if (gl->gl_lksb.sb_lvbptr && (gl->gl_state == LM_ST_EXCLUSIVE))
301 lvb_needs_unlock = 1;
302
303 if (test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags) &&
304 !lvb_needs_unlock) {
305 gfs2_glock_free(gl);
306 return;
307 }
308
309 error = dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_VALBLK,
310 NULL, gl);
311 if (error) {
312 fs_err(sdp, "gdlm_unlock %x,%llx err=%d\n",
313 gl->gl_name.ln_type,
314 (unsigned long long)gl->gl_name.ln_number, error);
315 return;
316 }
317}
318
319static void gdlm_cancel(struct gfs2_glock *gl)
320{
321 struct lm_lockstruct *ls = &gl->gl_name.ln_sbd->sd_lockstruct;
322 dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_CANCEL, NULL, gl);
323}
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465#define JID_BITMAP_OFFSET 8
466
467static void control_lvb_read(struct lm_lockstruct *ls, uint32_t *lvb_gen,
468 char *lvb_bits)
469{
470 __le32 gen;
471 memcpy(lvb_bits, ls->ls_control_lvb, GDLM_LVB_SIZE);
472 memcpy(&gen, lvb_bits, sizeof(__le32));
473 *lvb_gen = le32_to_cpu(gen);
474}
475
476static void control_lvb_write(struct lm_lockstruct *ls, uint32_t lvb_gen,
477 char *lvb_bits)
478{
479 __le32 gen;
480 memcpy(ls->ls_control_lvb, lvb_bits, GDLM_LVB_SIZE);
481 gen = cpu_to_le32(lvb_gen);
482 memcpy(ls->ls_control_lvb, &gen, sizeof(__le32));
483}
484
485static int all_jid_bits_clear(char *lvb)
486{
487 return !memchr_inv(lvb + JID_BITMAP_OFFSET, 0,
488 GDLM_LVB_SIZE - JID_BITMAP_OFFSET);
489}
490
491static void sync_wait_cb(void *arg)
492{
493 struct lm_lockstruct *ls = arg;
494 complete(&ls->ls_sync_wait);
495}
496
497static int sync_unlock(struct gfs2_sbd *sdp, struct dlm_lksb *lksb, char *name)
498{
499 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
500 int error;
501
502 error = dlm_unlock(ls->ls_dlm, lksb->sb_lkid, 0, lksb, ls);
503 if (error) {
504 fs_err(sdp, "%s lkid %x error %d\n",
505 name, lksb->sb_lkid, error);
506 return error;
507 }
508
509 wait_for_completion(&ls->ls_sync_wait);
510
511 if (lksb->sb_status != -DLM_EUNLOCK) {
512 fs_err(sdp, "%s lkid %x status %d\n",
513 name, lksb->sb_lkid, lksb->sb_status);
514 return -1;
515 }
516 return 0;
517}
518
519static int sync_lock(struct gfs2_sbd *sdp, int mode, uint32_t flags,
520 unsigned int num, struct dlm_lksb *lksb, char *name)
521{
522 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
523 char strname[GDLM_STRNAME_BYTES];
524 int error, status;
525
526 memset(strname, 0, GDLM_STRNAME_BYTES);
527 snprintf(strname, GDLM_STRNAME_BYTES, "%8x%16x", LM_TYPE_NONDISK, num);
528
529 error = dlm_lock(ls->ls_dlm, mode, lksb, flags,
530 strname, GDLM_STRNAME_BYTES - 1,
531 0, sync_wait_cb, ls, NULL);
532 if (error) {
533 fs_err(sdp, "%s lkid %x flags %x mode %d error %d\n",
534 name, lksb->sb_lkid, flags, mode, error);
535 return error;
536 }
537
538 wait_for_completion(&ls->ls_sync_wait);
539
540 status = lksb->sb_status;
541
542 if (status && status != -EAGAIN) {
543 fs_err(sdp, "%s lkid %x flags %x mode %d status %d\n",
544 name, lksb->sb_lkid, flags, mode, status);
545 }
546
547 return status;
548}
549
550static int mounted_unlock(struct gfs2_sbd *sdp)
551{
552 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
553 return sync_unlock(sdp, &ls->ls_mounted_lksb, "mounted_lock");
554}
555
556static int mounted_lock(struct gfs2_sbd *sdp, int mode, uint32_t flags)
557{
558 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
559 return sync_lock(sdp, mode, flags, GFS2_MOUNTED_LOCK,
560 &ls->ls_mounted_lksb, "mounted_lock");
561}
562
563static int control_unlock(struct gfs2_sbd *sdp)
564{
565 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
566 return sync_unlock(sdp, &ls->ls_control_lksb, "control_lock");
567}
568
569static int control_lock(struct gfs2_sbd *sdp, int mode, uint32_t flags)
570{
571 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
572 return sync_lock(sdp, mode, flags, GFS2_CONTROL_LOCK,
573 &ls->ls_control_lksb, "control_lock");
574}
575
576static void gfs2_control_func(struct work_struct *work)
577{
578 struct gfs2_sbd *sdp = container_of(work, struct gfs2_sbd, sd_control_work.work);
579 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
580 uint32_t block_gen, start_gen, lvb_gen, flags;
581 int recover_set = 0;
582 int write_lvb = 0;
583 int recover_size;
584 int i, error;
585
586 spin_lock(&ls->ls_recover_spin);
587
588
589
590
591
592
593
594
595
596 if (!test_bit(DFL_MOUNT_DONE, &ls->ls_recover_flags) ||
597 test_bit(DFL_FIRST_MOUNT, &ls->ls_recover_flags)) {
598 spin_unlock(&ls->ls_recover_spin);
599 return;
600 }
601 block_gen = ls->ls_recover_block;
602 start_gen = ls->ls_recover_start;
603 spin_unlock(&ls->ls_recover_spin);
604
605
606
607
608
609
610
611
612 if (block_gen == start_gen)
613 return;
614
615
616
617
618
619
620
621
622
623
624
625
626
627 error = control_lock(sdp, DLM_LOCK_EX, DLM_LKF_CONVERT|DLM_LKF_VALBLK);
628 if (error) {
629 fs_err(sdp, "control lock EX error %d\n", error);
630 return;
631 }
632
633 control_lvb_read(ls, &lvb_gen, ls->ls_lvb_bits);
634
635 spin_lock(&ls->ls_recover_spin);
636 if (block_gen != ls->ls_recover_block ||
637 start_gen != ls->ls_recover_start) {
638 fs_info(sdp, "recover generation %u block1 %u %u\n",
639 start_gen, block_gen, ls->ls_recover_block);
640 spin_unlock(&ls->ls_recover_spin);
641 control_lock(sdp, DLM_LOCK_NL, DLM_LKF_CONVERT);
642 return;
643 }
644
645 recover_size = ls->ls_recover_size;
646
647 if (lvb_gen <= start_gen) {
648
649
650
651
652
653
654
655
656
657 for (i = 0; i < recover_size; i++) {
658 if (ls->ls_recover_result[i] != LM_RD_SUCCESS)
659 continue;
660
661 ls->ls_recover_result[i] = 0;
662
663 if (!test_bit_le(i, ls->ls_lvb_bits + JID_BITMAP_OFFSET))
664 continue;
665
666 __clear_bit_le(i, ls->ls_lvb_bits + JID_BITMAP_OFFSET);
667 write_lvb = 1;
668 }
669 }
670
671 if (lvb_gen == start_gen) {
672
673
674
675 for (i = 0; i < recover_size; i++) {
676 if (!ls->ls_recover_submit[i])
677 continue;
678 if (ls->ls_recover_submit[i] < lvb_gen)
679 ls->ls_recover_submit[i] = 0;
680 }
681 } else if (lvb_gen < start_gen) {
682
683
684
685 for (i = 0; i < recover_size; i++) {
686 if (!ls->ls_recover_submit[i])
687 continue;
688 if (ls->ls_recover_submit[i] < start_gen) {
689 ls->ls_recover_submit[i] = 0;
690 __set_bit_le(i, ls->ls_lvb_bits + JID_BITMAP_OFFSET);
691 }
692 }
693
694
695 write_lvb = 1;
696 } else {
697
698
699
700 }
701 spin_unlock(&ls->ls_recover_spin);
702
703 if (write_lvb) {
704 control_lvb_write(ls, start_gen, ls->ls_lvb_bits);
705 flags = DLM_LKF_CONVERT | DLM_LKF_VALBLK;
706 } else {
707 flags = DLM_LKF_CONVERT;
708 }
709
710 error = control_lock(sdp, DLM_LOCK_NL, flags);
711 if (error) {
712 fs_err(sdp, "control lock NL error %d\n", error);
713 return;
714 }
715
716
717
718
719
720
721
722
723 for (i = 0; i < recover_size; i++) {
724 if (test_bit_le(i, ls->ls_lvb_bits + JID_BITMAP_OFFSET)) {
725 fs_info(sdp, "recover generation %u jid %d\n",
726 start_gen, i);
727 gfs2_recover_set(sdp, i);
728 recover_set++;
729 }
730 }
731 if (recover_set)
732 return;
733
734
735
736
737
738
739
740 spin_lock(&ls->ls_recover_spin);
741 if (ls->ls_recover_block == block_gen &&
742 ls->ls_recover_start == start_gen) {
743 clear_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags);
744 spin_unlock(&ls->ls_recover_spin);
745 fs_info(sdp, "recover generation %u done\n", start_gen);
746 gfs2_glock_thaw(sdp);
747 } else {
748 fs_info(sdp, "recover generation %u block2 %u %u\n",
749 start_gen, block_gen, ls->ls_recover_block);
750 spin_unlock(&ls->ls_recover_spin);
751 }
752}
753
754static int control_mount(struct gfs2_sbd *sdp)
755{
756 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
757 uint32_t start_gen, block_gen, mount_gen, lvb_gen;
758 int mounted_mode;
759 int retries = 0;
760 int error;
761
762 memset(&ls->ls_mounted_lksb, 0, sizeof(struct dlm_lksb));
763 memset(&ls->ls_control_lksb, 0, sizeof(struct dlm_lksb));
764 memset(&ls->ls_control_lvb, 0, GDLM_LVB_SIZE);
765 ls->ls_control_lksb.sb_lvbptr = ls->ls_control_lvb;
766 init_completion(&ls->ls_sync_wait);
767
768 set_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags);
769
770 error = control_lock(sdp, DLM_LOCK_NL, DLM_LKF_VALBLK);
771 if (error) {
772 fs_err(sdp, "control_mount control_lock NL error %d\n", error);
773 return error;
774 }
775
776 error = mounted_lock(sdp, DLM_LOCK_NL, 0);
777 if (error) {
778 fs_err(sdp, "control_mount mounted_lock NL error %d\n", error);
779 control_unlock(sdp);
780 return error;
781 }
782 mounted_mode = DLM_LOCK_NL;
783
784restart:
785 if (retries++ && signal_pending(current)) {
786 error = -EINTR;
787 goto fail;
788 }
789
790
791
792
793
794
795 if (mounted_mode != DLM_LOCK_NL) {
796 error = mounted_lock(sdp, DLM_LOCK_NL, DLM_LKF_CONVERT);
797 if (error)
798 goto fail;
799 mounted_mode = DLM_LOCK_NL;
800 }
801
802
803
804
805
806
807
808 msleep_interruptible(500);
809
810
811
812
813
814
815
816 error = control_lock(sdp, DLM_LOCK_EX, DLM_LKF_CONVERT|DLM_LKF_NOQUEUE|DLM_LKF_VALBLK);
817 if (error == -EAGAIN) {
818 goto restart;
819 } else if (error) {
820 fs_err(sdp, "control_mount control_lock EX error %d\n", error);
821 goto fail;
822 }
823
824
825
826
827
828 if (sdp->sd_args.ar_spectator)
829 goto locks_done;
830
831 error = mounted_lock(sdp, DLM_LOCK_EX, DLM_LKF_CONVERT|DLM_LKF_NOQUEUE);
832 if (!error) {
833 mounted_mode = DLM_LOCK_EX;
834 goto locks_done;
835 } else if (error != -EAGAIN) {
836 fs_err(sdp, "control_mount mounted_lock EX error %d\n", error);
837 goto fail;
838 }
839
840 error = mounted_lock(sdp, DLM_LOCK_PR, DLM_LKF_CONVERT|DLM_LKF_NOQUEUE);
841 if (!error) {
842 mounted_mode = DLM_LOCK_PR;
843 goto locks_done;
844 } else {
845
846 fs_err(sdp, "control_mount mounted_lock PR error %d\n", error);
847 goto fail;
848 }
849
850locks_done:
851
852
853
854
855
856
857
858
859
860
861
862 control_lvb_read(ls, &lvb_gen, ls->ls_lvb_bits);
863
864 if (lvb_gen == 0xFFFFFFFF) {
865
866 fs_err(sdp, "control_mount control_lock disabled\n");
867 error = -EINVAL;
868 goto fail;
869 }
870
871 if (mounted_mode == DLM_LOCK_EX) {
872
873 spin_lock(&ls->ls_recover_spin);
874 clear_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags);
875 set_bit(DFL_MOUNT_DONE, &ls->ls_recover_flags);
876 set_bit(DFL_FIRST_MOUNT, &ls->ls_recover_flags);
877 spin_unlock(&ls->ls_recover_spin);
878 fs_info(sdp, "first mounter control generation %u\n", lvb_gen);
879 return 0;
880 }
881
882 error = control_lock(sdp, DLM_LOCK_NL, DLM_LKF_CONVERT);
883 if (error)
884 goto fail;
885
886
887
888
889
890
891
892 if (!all_jid_bits_clear(ls->ls_lvb_bits)) {
893
894 fs_info(sdp, "control_mount wait for journal recovery\n");
895 goto restart;
896 }
897
898 spin_lock(&ls->ls_recover_spin);
899 block_gen = ls->ls_recover_block;
900 start_gen = ls->ls_recover_start;
901 mount_gen = ls->ls_recover_mount;
902
903 if (lvb_gen < mount_gen) {
904
905
906 if (sdp->sd_args.ar_spectator) {
907 fs_info(sdp, "Recovery is required. Waiting for a "
908 "non-spectator to mount.\n");
909 msleep_interruptible(1000);
910 } else {
911 fs_info(sdp, "control_mount wait1 block %u start %u "
912 "mount %u lvb %u flags %lx\n", block_gen,
913 start_gen, mount_gen, lvb_gen,
914 ls->ls_recover_flags);
915 }
916 spin_unlock(&ls->ls_recover_spin);
917 goto restart;
918 }
919
920 if (lvb_gen != start_gen) {
921
922
923 fs_info(sdp, "control_mount wait2 block %u start %u mount %u "
924 "lvb %u flags %lx\n", block_gen, start_gen, mount_gen,
925 lvb_gen, ls->ls_recover_flags);
926 spin_unlock(&ls->ls_recover_spin);
927 goto restart;
928 }
929
930 if (block_gen == start_gen) {
931
932 fs_info(sdp, "control_mount wait3 block %u start %u mount %u "
933 "lvb %u flags %lx\n", block_gen, start_gen, mount_gen,
934 lvb_gen, ls->ls_recover_flags);
935 spin_unlock(&ls->ls_recover_spin);
936 goto restart;
937 }
938
939 clear_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags);
940 set_bit(DFL_MOUNT_DONE, &ls->ls_recover_flags);
941 memset(ls->ls_recover_submit, 0, ls->ls_recover_size*sizeof(uint32_t));
942 memset(ls->ls_recover_result, 0, ls->ls_recover_size*sizeof(uint32_t));
943 spin_unlock(&ls->ls_recover_spin);
944 return 0;
945
946fail:
947 mounted_unlock(sdp);
948 control_unlock(sdp);
949 return error;
950}
951
952static int control_first_done(struct gfs2_sbd *sdp)
953{
954 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
955 uint32_t start_gen, block_gen;
956 int error;
957
958restart:
959 spin_lock(&ls->ls_recover_spin);
960 start_gen = ls->ls_recover_start;
961 block_gen = ls->ls_recover_block;
962
963 if (test_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags) ||
964 !test_bit(DFL_MOUNT_DONE, &ls->ls_recover_flags) ||
965 !test_bit(DFL_FIRST_MOUNT, &ls->ls_recover_flags)) {
966
967 fs_err(sdp, "control_first_done start %u block %u flags %lx\n",
968 start_gen, block_gen, ls->ls_recover_flags);
969 spin_unlock(&ls->ls_recover_spin);
970 control_unlock(sdp);
971 return -1;
972 }
973
974 if (start_gen == block_gen) {
975
976
977
978
979
980
981
982 spin_unlock(&ls->ls_recover_spin);
983 fs_info(sdp, "control_first_done wait gen %u\n", start_gen);
984
985 wait_on_bit(&ls->ls_recover_flags, DFL_DLM_RECOVERY,
986 TASK_UNINTERRUPTIBLE);
987 goto restart;
988 }
989
990 clear_bit(DFL_FIRST_MOUNT, &ls->ls_recover_flags);
991 set_bit(DFL_FIRST_MOUNT_DONE, &ls->ls_recover_flags);
992 memset(ls->ls_recover_submit, 0, ls->ls_recover_size*sizeof(uint32_t));
993 memset(ls->ls_recover_result, 0, ls->ls_recover_size*sizeof(uint32_t));
994 spin_unlock(&ls->ls_recover_spin);
995
996 memset(ls->ls_lvb_bits, 0, GDLM_LVB_SIZE);
997 control_lvb_write(ls, start_gen, ls->ls_lvb_bits);
998
999 error = mounted_lock(sdp, DLM_LOCK_PR, DLM_LKF_CONVERT);
1000 if (error)
1001 fs_err(sdp, "control_first_done mounted PR error %d\n", error);
1002
1003 error = control_lock(sdp, DLM_LOCK_NL, DLM_LKF_CONVERT|DLM_LKF_VALBLK);
1004 if (error)
1005 fs_err(sdp, "control_first_done control NL error %d\n", error);
1006
1007 return error;
1008}
1009
1010
1011
1012
1013
1014
1015
1016#define RECOVER_SIZE_INC 16
1017
1018static int set_recover_size(struct gfs2_sbd *sdp, struct dlm_slot *slots,
1019 int num_slots)
1020{
1021 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1022 uint32_t *submit = NULL;
1023 uint32_t *result = NULL;
1024 uint32_t old_size, new_size;
1025 int i, max_jid;
1026
1027 if (!ls->ls_lvb_bits) {
1028 ls->ls_lvb_bits = kzalloc(GDLM_LVB_SIZE, GFP_NOFS);
1029 if (!ls->ls_lvb_bits)
1030 return -ENOMEM;
1031 }
1032
1033 max_jid = 0;
1034 for (i = 0; i < num_slots; i++) {
1035 if (max_jid < slots[i].slot - 1)
1036 max_jid = slots[i].slot - 1;
1037 }
1038
1039 old_size = ls->ls_recover_size;
1040
1041 if (old_size >= max_jid + 1)
1042 return 0;
1043
1044 new_size = old_size + RECOVER_SIZE_INC;
1045
1046 submit = kcalloc(new_size, sizeof(uint32_t), GFP_NOFS);
1047 result = kcalloc(new_size, sizeof(uint32_t), GFP_NOFS);
1048 if (!submit || !result) {
1049 kfree(submit);
1050 kfree(result);
1051 return -ENOMEM;
1052 }
1053
1054 spin_lock(&ls->ls_recover_spin);
1055 memcpy(submit, ls->ls_recover_submit, old_size * sizeof(uint32_t));
1056 memcpy(result, ls->ls_recover_result, old_size * sizeof(uint32_t));
1057 kfree(ls->ls_recover_submit);
1058 kfree(ls->ls_recover_result);
1059 ls->ls_recover_submit = submit;
1060 ls->ls_recover_result = result;
1061 ls->ls_recover_size = new_size;
1062 spin_unlock(&ls->ls_recover_spin);
1063 return 0;
1064}
1065
1066static void free_recover_size(struct lm_lockstruct *ls)
1067{
1068 kfree(ls->ls_lvb_bits);
1069 kfree(ls->ls_recover_submit);
1070 kfree(ls->ls_recover_result);
1071 ls->ls_recover_submit = NULL;
1072 ls->ls_recover_result = NULL;
1073 ls->ls_recover_size = 0;
1074 ls->ls_lvb_bits = NULL;
1075}
1076
1077
1078
1079static void gdlm_recover_prep(void *arg)
1080{
1081 struct gfs2_sbd *sdp = arg;
1082 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1083
1084 spin_lock(&ls->ls_recover_spin);
1085 ls->ls_recover_block = ls->ls_recover_start;
1086 set_bit(DFL_DLM_RECOVERY, &ls->ls_recover_flags);
1087
1088 if (!test_bit(DFL_MOUNT_DONE, &ls->ls_recover_flags) ||
1089 test_bit(DFL_FIRST_MOUNT, &ls->ls_recover_flags)) {
1090 spin_unlock(&ls->ls_recover_spin);
1091 return;
1092 }
1093 set_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags);
1094 spin_unlock(&ls->ls_recover_spin);
1095}
1096
1097
1098
1099
1100static void gdlm_recover_slot(void *arg, struct dlm_slot *slot)
1101{
1102 struct gfs2_sbd *sdp = arg;
1103 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1104 int jid = slot->slot - 1;
1105
1106 spin_lock(&ls->ls_recover_spin);
1107 if (ls->ls_recover_size < jid + 1) {
1108 fs_err(sdp, "recover_slot jid %d gen %u short size %d\n",
1109 jid, ls->ls_recover_block, ls->ls_recover_size);
1110 spin_unlock(&ls->ls_recover_spin);
1111 return;
1112 }
1113
1114 if (ls->ls_recover_submit[jid]) {
1115 fs_info(sdp, "recover_slot jid %d gen %u prev %u\n",
1116 jid, ls->ls_recover_block, ls->ls_recover_submit[jid]);
1117 }
1118 ls->ls_recover_submit[jid] = ls->ls_recover_block;
1119 spin_unlock(&ls->ls_recover_spin);
1120}
1121
1122
1123
1124static void gdlm_recover_done(void *arg, struct dlm_slot *slots, int num_slots,
1125 int our_slot, uint32_t generation)
1126{
1127 struct gfs2_sbd *sdp = arg;
1128 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1129
1130
1131 set_recover_size(sdp, slots, num_slots);
1132
1133 spin_lock(&ls->ls_recover_spin);
1134 ls->ls_recover_start = generation;
1135
1136 if (!ls->ls_recover_mount) {
1137 ls->ls_recover_mount = generation;
1138 ls->ls_jid = our_slot - 1;
1139 }
1140
1141 if (!test_bit(DFL_UNMOUNT, &ls->ls_recover_flags))
1142 queue_delayed_work(gfs2_control_wq, &sdp->sd_control_work, 0);
1143
1144 clear_bit(DFL_DLM_RECOVERY, &ls->ls_recover_flags);
1145 smp_mb__after_atomic();
1146 wake_up_bit(&ls->ls_recover_flags, DFL_DLM_RECOVERY);
1147 spin_unlock(&ls->ls_recover_spin);
1148}
1149
1150
1151
1152static void gdlm_recovery_result(struct gfs2_sbd *sdp, unsigned int jid,
1153 unsigned int result)
1154{
1155 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1156
1157 if (test_bit(DFL_NO_DLM_OPS, &ls->ls_recover_flags))
1158 return;
1159
1160
1161 if (jid == ls->ls_jid)
1162 return;
1163
1164 spin_lock(&ls->ls_recover_spin);
1165 if (test_bit(DFL_FIRST_MOUNT, &ls->ls_recover_flags)) {
1166 spin_unlock(&ls->ls_recover_spin);
1167 return;
1168 }
1169 if (ls->ls_recover_size < jid + 1) {
1170 fs_err(sdp, "recovery_result jid %d short size %d\n",
1171 jid, ls->ls_recover_size);
1172 spin_unlock(&ls->ls_recover_spin);
1173 return;
1174 }
1175
1176 fs_info(sdp, "recover jid %d result %s\n", jid,
1177 result == LM_RD_GAVEUP ? "busy" : "success");
1178
1179 ls->ls_recover_result[jid] = result;
1180
1181
1182
1183
1184
1185 if (!test_bit(DFL_UNMOUNT, &ls->ls_recover_flags))
1186 queue_delayed_work(gfs2_control_wq, &sdp->sd_control_work,
1187 result == LM_RD_GAVEUP ? HZ : 0);
1188 spin_unlock(&ls->ls_recover_spin);
1189}
1190
1191static const struct dlm_lockspace_ops gdlm_lockspace_ops = {
1192 .recover_prep = gdlm_recover_prep,
1193 .recover_slot = gdlm_recover_slot,
1194 .recover_done = gdlm_recover_done,
1195};
1196
1197static int gdlm_mount(struct gfs2_sbd *sdp, const char *table)
1198{
1199 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1200 char cluster[GFS2_LOCKNAME_LEN];
1201 const char *fsname;
1202 uint32_t flags;
1203 int error, ops_result;
1204
1205
1206
1207
1208
1209 INIT_DELAYED_WORK(&sdp->sd_control_work, gfs2_control_func);
1210 spin_lock_init(&ls->ls_recover_spin);
1211 ls->ls_recover_flags = 0;
1212 ls->ls_recover_mount = 0;
1213 ls->ls_recover_start = 0;
1214 ls->ls_recover_block = 0;
1215 ls->ls_recover_size = 0;
1216 ls->ls_recover_submit = NULL;
1217 ls->ls_recover_result = NULL;
1218 ls->ls_lvb_bits = NULL;
1219
1220 error = set_recover_size(sdp, NULL, 0);
1221 if (error)
1222 goto fail;
1223
1224
1225
1226
1227
1228 fsname = strchr(table, ':');
1229 if (!fsname) {
1230 fs_info(sdp, "no fsname found\n");
1231 error = -EINVAL;
1232 goto fail_free;
1233 }
1234 memset(cluster, 0, sizeof(cluster));
1235 memcpy(cluster, table, strlen(table) - strlen(fsname));
1236 fsname++;
1237
1238 flags = DLM_LSFL_FS | DLM_LSFL_NEWEXCL;
1239
1240
1241
1242
1243
1244 error = dlm_new_lockspace(fsname, cluster, flags, GDLM_LVB_SIZE,
1245 &gdlm_lockspace_ops, sdp, &ops_result,
1246 &ls->ls_dlm);
1247 if (error) {
1248 fs_err(sdp, "dlm_new_lockspace error %d\n", error);
1249 goto fail_free;
1250 }
1251
1252 if (ops_result < 0) {
1253
1254
1255
1256
1257 fs_info(sdp, "dlm lockspace ops not used\n");
1258 free_recover_size(ls);
1259 set_bit(DFL_NO_DLM_OPS, &ls->ls_recover_flags);
1260 return 0;
1261 }
1262
1263 if (!test_bit(SDF_NOJOURNALID, &sdp->sd_flags)) {
1264 fs_err(sdp, "dlm lockspace ops disallow jid preset\n");
1265 error = -EINVAL;
1266 goto fail_release;
1267 }
1268
1269
1270
1271
1272
1273
1274 error = control_mount(sdp);
1275 if (error) {
1276 fs_err(sdp, "mount control error %d\n", error);
1277 goto fail_release;
1278 }
1279
1280 ls->ls_first = !!test_bit(DFL_FIRST_MOUNT, &ls->ls_recover_flags);
1281 clear_bit(SDF_NOJOURNALID, &sdp->sd_flags);
1282 smp_mb__after_atomic();
1283 wake_up_bit(&sdp->sd_flags, SDF_NOJOURNALID);
1284 return 0;
1285
1286fail_release:
1287 dlm_release_lockspace(ls->ls_dlm, 2);
1288fail_free:
1289 free_recover_size(ls);
1290fail:
1291 return error;
1292}
1293
1294static void gdlm_first_done(struct gfs2_sbd *sdp)
1295{
1296 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1297 int error;
1298
1299 if (test_bit(DFL_NO_DLM_OPS, &ls->ls_recover_flags))
1300 return;
1301
1302 error = control_first_done(sdp);
1303 if (error)
1304 fs_err(sdp, "mount first_done error %d\n", error);
1305}
1306
1307static void gdlm_unmount(struct gfs2_sbd *sdp)
1308{
1309 struct lm_lockstruct *ls = &sdp->sd_lockstruct;
1310
1311 if (test_bit(DFL_NO_DLM_OPS, &ls->ls_recover_flags))
1312 goto release;
1313
1314
1315
1316 spin_lock(&ls->ls_recover_spin);
1317 set_bit(DFL_UNMOUNT, &ls->ls_recover_flags);
1318 spin_unlock(&ls->ls_recover_spin);
1319 flush_delayed_work(&sdp->sd_control_work);
1320
1321
1322release:
1323 if (ls->ls_dlm) {
1324 dlm_release_lockspace(ls->ls_dlm, 2);
1325 ls->ls_dlm = NULL;
1326 }
1327
1328 free_recover_size(ls);
1329}
1330
1331static const match_table_t dlm_tokens = {
1332 { Opt_jid, "jid=%d"},
1333 { Opt_id, "id=%d"},
1334 { Opt_first, "first=%d"},
1335 { Opt_nodir, "nodir=%d"},
1336 { Opt_err, NULL },
1337};
1338
1339const struct lm_lockops gfs2_dlm_ops = {
1340 .lm_proto_name = "lock_dlm",
1341 .lm_mount = gdlm_mount,
1342 .lm_first_done = gdlm_first_done,
1343 .lm_recovery_result = gdlm_recovery_result,
1344 .lm_unmount = gdlm_unmount,
1345 .lm_put_lock = gdlm_put_lock,
1346 .lm_lock = gdlm_lock,
1347 .lm_cancel = gdlm_cancel,
1348 .lm_tokens = &dlm_tokens,
1349};
1350
1351