1
2
3
4
5
6
7
8
9
10#ifndef __INCORE_DOT_H__
11#define __INCORE_DOT_H__
12
13#include <linux/fs.h>
14#include <linux/kobject.h>
15#include <linux/workqueue.h>
16#include <linux/dlm.h>
17#include <linux/buffer_head.h>
18#include <linux/rcupdate.h>
19#include <linux/rculist_bl.h>
20#include <linux/completion.h>
21#include <linux/rbtree.h>
22#include <linux/ktime.h>
23#include <linux/percpu.h>
24#include <linux/lockref.h>
25#include <linux/rhashtable.h>
26
27#define DIO_WAIT 0x00000010
28#define DIO_METADATA 0x00000020
29
30struct gfs2_log_operations;
31struct gfs2_bufdata;
32struct gfs2_holder;
33struct gfs2_glock;
34struct gfs2_quota_data;
35struct gfs2_trans;
36struct gfs2_jdesc;
37struct gfs2_sbd;
38struct lm_lockops;
39
40typedef void (*gfs2_glop_bh_t) (struct gfs2_glock *gl, unsigned int ret);
41
42struct gfs2_log_header_host {
43 u64 lh_sequence;
44 u32 lh_flags;
45 u32 lh_tail;
46 u32 lh_blkno;
47 u32 lh_hash;
48};
49
50
51
52
53
54
55struct gfs2_log_operations {
56 void (*lo_before_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
57 void (*lo_after_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
58 void (*lo_before_scan) (struct gfs2_jdesc *jd,
59 struct gfs2_log_header_host *head, int pass);
60 int (*lo_scan_elements) (struct gfs2_jdesc *jd, unsigned int start,
61 struct gfs2_log_descriptor *ld, __be64 *ptr,
62 int pass);
63 void (*lo_after_scan) (struct gfs2_jdesc *jd, int error, int pass);
64 const char *lo_name;
65};
66
67#define GBF_FULL 1
68
69struct gfs2_bitmap {
70 struct buffer_head *bi_bh;
71 char *bi_clone;
72 unsigned long bi_flags;
73 u32 bi_offset;
74 u32 bi_start;
75 u32 bi_len;
76 u32 bi_blocks;
77};
78
79struct gfs2_rgrpd {
80 struct rb_node rd_node;
81 struct gfs2_glock *rd_gl;
82 u64 rd_addr;
83 u64 rd_data0;
84 u32 rd_length;
85 u32 rd_data;
86 u32 rd_bitbytes;
87 u32 rd_free;
88 u32 rd_reserved;
89 u32 rd_free_clone;
90 u32 rd_dinodes;
91 u64 rd_igeneration;
92 struct gfs2_bitmap *rd_bits;
93 struct gfs2_sbd *rd_sbd;
94 struct gfs2_rgrp_lvb *rd_rgl;
95 u32 rd_last_alloc;
96 u32 rd_flags;
97 u32 rd_extfail_pt;
98#define GFS2_RDF_CHECK 0x10000000
99#define GFS2_RDF_UPTODATE 0x20000000
100#define GFS2_RDF_ERROR 0x40000000
101#define GFS2_RDF_PREFERRED 0x80000000
102#define GFS2_RDF_MASK 0xf0000000
103 spinlock_t rd_rsspin;
104 struct rb_root rd_rstree;
105};
106
107struct gfs2_rbm {
108 struct gfs2_rgrpd *rgd;
109 u32 offset;
110 int bii;
111};
112
113static inline struct gfs2_bitmap *rbm_bi(const struct gfs2_rbm *rbm)
114{
115 return rbm->rgd->rd_bits + rbm->bii;
116}
117
118static inline u64 gfs2_rbm_to_block(const struct gfs2_rbm *rbm)
119{
120 return rbm->rgd->rd_data0 + (rbm_bi(rbm)->bi_start * GFS2_NBBY) +
121 rbm->offset;
122}
123
124static inline bool gfs2_rbm_eq(const struct gfs2_rbm *rbm1,
125 const struct gfs2_rbm *rbm2)
126{
127 return (rbm1->rgd == rbm2->rgd) && (rbm1->bii == rbm2->bii) &&
128 (rbm1->offset == rbm2->offset);
129}
130
131enum gfs2_state_bits {
132 BH_Pinned = BH_PrivateStart,
133 BH_Escaped = BH_PrivateStart + 1,
134 BH_Zeronew = BH_PrivateStart + 2,
135};
136
137BUFFER_FNS(Pinned, pinned)
138TAS_BUFFER_FNS(Pinned, pinned)
139BUFFER_FNS(Escaped, escaped)
140TAS_BUFFER_FNS(Escaped, escaped)
141BUFFER_FNS(Zeronew, zeronew)
142TAS_BUFFER_FNS(Zeronew, zeronew)
143
144struct gfs2_bufdata {
145 struct buffer_head *bd_bh;
146 struct gfs2_glock *bd_gl;
147 u64 bd_blkno;
148
149 struct list_head bd_list;
150 const struct gfs2_log_operations *bd_ops;
151
152 struct gfs2_trans *bd_tr;
153 struct list_head bd_ail_st_list;
154 struct list_head bd_ail_gl_list;
155};
156
157
158
159
160
161
162#define GDLM_STRNAME_BYTES 25
163#define GDLM_LVB_SIZE 32
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196enum {
197 DFL_BLOCK_LOCKS = 0,
198 DFL_NO_DLM_OPS = 1,
199 DFL_FIRST_MOUNT = 2,
200 DFL_FIRST_MOUNT_DONE = 3,
201 DFL_MOUNT_DONE = 4,
202 DFL_UNMOUNT = 5,
203 DFL_DLM_RECOVERY = 6,
204};
205
206struct lm_lockname {
207 struct gfs2_sbd *ln_sbd;
208 u64 ln_number;
209 unsigned int ln_type;
210};
211
212#define lm_name_equal(name1, name2) \
213 (((name1)->ln_number == (name2)->ln_number) && \
214 ((name1)->ln_type == (name2)->ln_type) && \
215 ((name1)->ln_sbd == (name2)->ln_sbd))
216
217
218struct gfs2_glock_operations {
219 void (*go_sync) (struct gfs2_glock *gl);
220 int (*go_xmote_bh) (struct gfs2_glock *gl, struct gfs2_holder *gh);
221 void (*go_inval) (struct gfs2_glock *gl, int flags);
222 int (*go_demote_ok) (const struct gfs2_glock *gl);
223 int (*go_lock) (struct gfs2_holder *gh);
224 void (*go_unlock) (struct gfs2_holder *gh);
225 void (*go_dump)(struct seq_file *seq, const struct gfs2_glock *gl);
226 void (*go_callback)(struct gfs2_glock *gl, bool remote);
227 const int go_type;
228 const unsigned long go_flags;
229#define GLOF_ASPACE 1
230#define GLOF_LVB 2
231#define GLOF_LRU 4
232};
233
234enum {
235 GFS2_LKS_SRTT = 0,
236 GFS2_LKS_SRTTVAR = 1,
237 GFS2_LKS_SRTTB = 2,
238 GFS2_LKS_SRTTVARB = 3,
239 GFS2_LKS_SIRT = 4,
240 GFS2_LKS_SIRTVAR = 5,
241 GFS2_LKS_DCOUNT = 6,
242 GFS2_LKS_QCOUNT = 7,
243 GFS2_NR_LKSTATS
244};
245
246struct gfs2_lkstats {
247 u64 stats[GFS2_NR_LKSTATS];
248};
249
250enum {
251
252 HIF_HOLDER = 6,
253 HIF_FIRST = 7,
254 HIF_WAIT = 10,
255};
256
257struct gfs2_holder {
258 struct list_head gh_list;
259
260 struct gfs2_glock *gh_gl;
261 struct pid *gh_owner_pid;
262 u16 gh_flags;
263 u16 gh_state;
264
265 int gh_error;
266 unsigned long gh_iflags;
267 unsigned long gh_ip;
268};
269
270
271#define GFS2_MAXQUOTAS 2
272
273struct gfs2_qadata {
274
275 struct gfs2_quota_data *qa_qd[2 * GFS2_MAXQUOTAS];
276 struct gfs2_holder qa_qd_ghs[2 * GFS2_MAXQUOTAS];
277 unsigned int qa_qd_num;
278};
279
280
281
282
283
284
285
286
287
288
289struct gfs2_blkreserv {
290
291 atomic_t rs_sizehint;
292
293 struct gfs2_holder rs_rgd_gh;
294 struct rb_node rs_node;
295 struct gfs2_rbm rs_rbm;
296 u32 rs_free;
297 u64 rs_inum;
298};
299
300
301
302
303
304
305
306
307
308
309struct gfs2_alloc_parms {
310 u64 target;
311 u32 min_target;
312 u32 aflags;
313 u64 allowed;
314};
315
316enum {
317 GLF_LOCK = 1,
318 GLF_DEMOTE = 3,
319 GLF_PENDING_DEMOTE = 4,
320 GLF_DEMOTE_IN_PROGRESS = 5,
321 GLF_DIRTY = 6,
322 GLF_LFLUSH = 7,
323 GLF_INVALIDATE_IN_PROGRESS = 8,
324 GLF_REPLY_PENDING = 9,
325 GLF_INITIAL = 10,
326 GLF_FROZEN = 11,
327 GLF_QUEUED = 12,
328 GLF_LRU = 13,
329 GLF_OBJECT = 14,
330 GLF_BLOCKING = 15,
331 GLF_INODE_CREATING = 16,
332};
333
334struct gfs2_glock {
335 struct hlist_bl_node gl_list;
336 unsigned long gl_flags;
337 struct lm_lockname gl_name;
338
339 struct lockref gl_lockref;
340
341
342 unsigned int gl_state:2,
343 gl_target:2,
344 gl_demote_state:2,
345 gl_req:2,
346 gl_reply:8;
347
348 unsigned long gl_demote_time;
349 long gl_hold_time;
350 struct list_head gl_holders;
351
352 const struct gfs2_glock_operations *gl_ops;
353 ktime_t gl_dstamp;
354 struct gfs2_lkstats gl_stats;
355 struct dlm_lksb gl_lksb;
356 unsigned long gl_tchange;
357 void *gl_object;
358
359 struct list_head gl_lru;
360 struct list_head gl_ail_list;
361 atomic_t gl_ail_count;
362 atomic_t gl_revokes;
363 struct delayed_work gl_work;
364 union {
365
366 struct work_struct gl_delete;
367
368 struct {
369 loff_t start;
370 loff_t end;
371 } gl_vm;
372 };
373 struct rhash_head gl_node;
374};
375
376#define GFS2_MIN_LVB_SIZE 32
377
378enum {
379 GIF_INVALID = 0,
380 GIF_QD_LOCKED = 1,
381 GIF_ALLOC_FAILED = 2,
382 GIF_SW_PAGED = 3,
383 GIF_ORDERED = 4,
384 GIF_FREE_VFS_INODE = 5,
385};
386
387struct gfs2_inode {
388 struct inode i_inode;
389 u64 i_no_addr;
390 u64 i_no_formal_ino;
391 u64 i_generation;
392 u64 i_eattr;
393 unsigned long i_flags;
394 struct gfs2_glock *i_gl;
395 struct gfs2_holder i_iopen_gh;
396 struct gfs2_holder i_gh;
397 struct gfs2_qadata *i_qadata;
398 struct gfs2_blkreserv i_res;
399 struct gfs2_rgrpd *i_rgd;
400 u64 i_goal;
401 struct rw_semaphore i_rw_mutex;
402 struct list_head i_ordered;
403 struct list_head i_trunc_list;
404 __be64 *i_hash_cache;
405 u32 i_entries;
406 u32 i_diskflags;
407 u8 i_height;
408 u8 i_depth;
409 u16 i_rahead;
410};
411
412
413
414
415
416static inline struct gfs2_inode *GFS2_I(struct inode *inode)
417{
418 return container_of(inode, struct gfs2_inode, i_inode);
419}
420
421static inline struct gfs2_sbd *GFS2_SB(const struct inode *inode)
422{
423 return inode->i_sb->s_fs_info;
424}
425
426struct gfs2_file {
427 struct mutex f_fl_mutex;
428 struct gfs2_holder f_fl_gh;
429};
430
431struct gfs2_revoke_replay {
432 struct list_head rr_list;
433 u64 rr_blkno;
434 unsigned int rr_where;
435};
436
437enum {
438 QDF_CHANGE = 1,
439 QDF_LOCKED = 2,
440 QDF_REFRESH = 3,
441 QDF_QMSG_QUIET = 4,
442};
443
444struct gfs2_quota_data {
445 struct hlist_bl_node qd_hlist;
446 struct list_head qd_list;
447 struct kqid qd_id;
448 struct gfs2_sbd *qd_sbd;
449 struct lockref qd_lockref;
450 struct list_head qd_lru;
451 unsigned qd_hash;
452
453 unsigned long qd_flags;
454
455 s64 qd_change;
456 s64 qd_change_sync;
457
458 unsigned int qd_slot;
459 unsigned int qd_slot_count;
460
461 struct buffer_head *qd_bh;
462 struct gfs2_quota_change *qd_bh_qc;
463 unsigned int qd_bh_count;
464
465 struct gfs2_glock *qd_gl;
466 struct gfs2_quota_lvb qd_qb;
467
468 u64 qd_sync_gen;
469 unsigned long qd_last_warn;
470 struct rcu_head qd_rcu;
471};
472
473struct gfs2_trans {
474 unsigned long tr_ip;
475
476 unsigned int tr_blocks;
477 unsigned int tr_revokes;
478 unsigned int tr_reserved;
479 unsigned int tr_touched:1;
480 unsigned int tr_attached:1;
481 unsigned int tr_alloced:1;
482
483 unsigned int tr_num_buf_new;
484 unsigned int tr_num_databuf_new;
485 unsigned int tr_num_buf_rm;
486 unsigned int tr_num_databuf_rm;
487 unsigned int tr_num_revoke;
488 unsigned int tr_num_revoke_rm;
489
490 struct list_head tr_list;
491 struct list_head tr_databuf;
492 struct list_head tr_buf;
493
494 unsigned int tr_first;
495 struct list_head tr_ail1_list;
496 struct list_head tr_ail2_list;
497};
498
499struct gfs2_journal_extent {
500 struct list_head list;
501
502 unsigned int lblock;
503 u64 dblock;
504 u64 blocks;
505};
506
507struct gfs2_jdesc {
508 struct list_head jd_list;
509 struct list_head extent_list;
510 unsigned int nr_extents;
511 struct work_struct jd_work;
512 struct inode *jd_inode;
513 unsigned long jd_flags;
514#define JDF_RECOVERY 1
515 unsigned int jd_jid;
516 unsigned int jd_blocks;
517 int jd_recover_error;
518
519
520 unsigned int jd_found_blocks;
521 unsigned int jd_found_revokes;
522 unsigned int jd_replayed_blocks;
523
524 struct list_head jd_revoke_list;
525 unsigned int jd_replay_tail;
526
527};
528
529struct gfs2_statfs_change_host {
530 s64 sc_total;
531 s64 sc_free;
532 s64 sc_dinodes;
533};
534
535#define GFS2_QUOTA_DEFAULT GFS2_QUOTA_OFF
536#define GFS2_QUOTA_OFF 0
537#define GFS2_QUOTA_ACCOUNT 1
538#define GFS2_QUOTA_ON 2
539
540#define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED
541#define GFS2_DATA_WRITEBACK 1
542#define GFS2_DATA_ORDERED 2
543
544#define GFS2_ERRORS_DEFAULT GFS2_ERRORS_WITHDRAW
545#define GFS2_ERRORS_WITHDRAW 0
546#define GFS2_ERRORS_CONTINUE 1
547#define GFS2_ERRORS_RO 2
548#define GFS2_ERRORS_PANIC 3
549
550struct gfs2_args {
551 char ar_lockproto[GFS2_LOCKNAME_LEN];
552 char ar_locktable[GFS2_LOCKNAME_LEN];
553 char ar_hostdata[GFS2_LOCKNAME_LEN];
554 unsigned int ar_spectator:1;
555 unsigned int ar_localflocks:1;
556 unsigned int ar_debug:1;
557 unsigned int ar_posix_acl:1;
558 unsigned int ar_quota:2;
559 unsigned int ar_suiddir:1;
560 unsigned int ar_data:2;
561 unsigned int ar_meta:1;
562 unsigned int ar_discard:1;
563 unsigned int ar_errors:2;
564 unsigned int ar_nobarrier:1;
565 unsigned int ar_rgrplvb:1;
566 unsigned int ar_loccookie:1;
567
568 int ar_commit;
569 int ar_statfs_quantum;
570 int ar_quota_quantum;
571 int ar_statfs_percent;
572};
573
574struct gfs2_tune {
575 spinlock_t gt_spin;
576
577 unsigned int gt_logd_secs;
578
579 unsigned int gt_quota_warn_period;
580 unsigned int gt_quota_scale_num;
581 unsigned int gt_quota_scale_den;
582 unsigned int gt_quota_quantum;
583 unsigned int gt_new_files_jdata;
584 unsigned int gt_max_readahead;
585 unsigned int gt_complain_secs;
586 unsigned int gt_statfs_quantum;
587 unsigned int gt_statfs_slow;
588};
589
590enum {
591 SDF_JOURNAL_CHECKED = 0,
592 SDF_JOURNAL_LIVE = 1,
593 SDF_SHUTDOWN = 2,
594 SDF_NOBARRIERS = 3,
595 SDF_NORECOVERY = 4,
596 SDF_DEMOTE = 5,
597 SDF_NOJOURNALID = 6,
598 SDF_RORECOVERY = 7,
599 SDF_SKIP_DLM_UNLOCK = 8,
600};
601
602enum gfs2_freeze_state {
603 SFS_UNFROZEN = 0,
604 SFS_STARTING_FREEZE = 1,
605 SFS_FROZEN = 2,
606};
607
608#define GFS2_FSNAME_LEN 256
609
610struct gfs2_inum_host {
611 u64 no_formal_ino;
612 u64 no_addr;
613};
614
615struct gfs2_sb_host {
616 u32 sb_magic;
617 u32 sb_type;
618 u32 sb_format;
619
620 u32 sb_fs_format;
621 u32 sb_multihost_format;
622 u32 sb_bsize;
623 u32 sb_bsize_shift;
624
625 struct gfs2_inum_host sb_master_dir;
626 struct gfs2_inum_host sb_root_dir;
627
628 char sb_lockproto[GFS2_LOCKNAME_LEN];
629 char sb_locktable[GFS2_LOCKNAME_LEN];
630};
631
632
633
634
635
636
637
638
639
640
641struct lm_lockstruct {
642 int ls_jid;
643 unsigned int ls_first;
644 const struct lm_lockops *ls_ops;
645 dlm_lockspace_t *ls_dlm;
646
647 int ls_recover_jid_done;
648 int ls_recover_jid_status;
649
650 struct dlm_lksb ls_mounted_lksb;
651 struct dlm_lksb ls_control_lksb;
652 char ls_control_lvb[GDLM_LVB_SIZE];
653 struct completion ls_sync_wait;
654 char *ls_lvb_bits;
655
656 spinlock_t ls_recover_spin;
657 unsigned long ls_recover_flags;
658 uint32_t ls_recover_mount;
659 uint32_t ls_recover_start;
660 uint32_t ls_recover_block;
661 uint32_t ls_recover_size;
662 uint32_t *ls_recover_submit;
663 uint32_t *ls_recover_result;
664};
665
666struct gfs2_pcpu_lkstats {
667
668 struct gfs2_lkstats lkstats[10];
669};
670
671struct gfs2_sbd {
672 struct super_block *sd_vfs;
673 struct gfs2_pcpu_lkstats __percpu *sd_lkstats;
674 struct kobject sd_kobj;
675 unsigned long sd_flags;
676 struct gfs2_sb_host sd_sb;
677
678
679
680 u32 sd_fsb2bb;
681 u32 sd_fsb2bb_shift;
682 u32 sd_diptrs;
683 u32 sd_inptrs;
684 u32 sd_jbsize;
685 u32 sd_hash_bsize;
686 u32 sd_hash_bsize_shift;
687 u32 sd_hash_ptrs;
688 u32 sd_qc_per_block;
689 u32 sd_blocks_per_bitmap;
690 u32 sd_max_dirres;
691 u32 sd_max_height;
692 u64 sd_heightsize[GFS2_MAX_META_HEIGHT + 1];
693 u32 sd_max_jheight;
694 u64 sd_jheightsize[GFS2_MAX_META_HEIGHT + 1];
695 u32 sd_max_dents_per_leaf;
696
697 struct gfs2_args sd_args;
698 struct gfs2_tune sd_tune;
699
700
701
702 struct lm_lockstruct sd_lockstruct;
703 struct gfs2_holder sd_live_gh;
704 struct gfs2_glock *sd_rename_gl;
705 struct gfs2_glock *sd_freeze_gl;
706 struct work_struct sd_freeze_work;
707 wait_queue_head_t sd_glock_wait;
708 atomic_t sd_glock_disposal;
709 struct completion sd_locking_init;
710 struct completion sd_wdack;
711 struct delayed_work sd_control_work;
712
713
714
715 struct dentry *sd_master_dir;
716 struct dentry *sd_root_dir;
717
718 struct inode *sd_jindex;
719 struct inode *sd_statfs_inode;
720 struct inode *sd_sc_inode;
721 struct inode *sd_qc_inode;
722 struct inode *sd_rindex;
723 struct inode *sd_quota_inode;
724
725
726
727 spinlock_t sd_statfs_spin;
728 struct gfs2_statfs_change_host sd_statfs_master;
729 struct gfs2_statfs_change_host sd_statfs_local;
730 int sd_statfs_force_sync;
731
732
733
734 int sd_rindex_uptodate;
735 spinlock_t sd_rindex_spin;
736 struct rb_root sd_rindex_tree;
737 unsigned int sd_rgrps;
738 unsigned int sd_max_rg_data;
739
740
741
742 struct list_head sd_jindex_list;
743 spinlock_t sd_jindex_spin;
744 struct mutex sd_jindex_mutex;
745 unsigned int sd_journals;
746
747 struct gfs2_jdesc *sd_jdesc;
748 struct gfs2_holder sd_journal_gh;
749 struct gfs2_holder sd_jinode_gh;
750
751 struct gfs2_holder sd_sc_gh;
752 struct gfs2_holder sd_qc_gh;
753
754 struct completion sd_journal_ready;
755
756
757
758 struct task_struct *sd_logd_process;
759 struct task_struct *sd_quotad_process;
760
761
762
763 struct list_head sd_quota_list;
764 atomic_t sd_quota_count;
765 struct mutex sd_quota_mutex;
766 struct mutex sd_quota_sync_mutex;
767 wait_queue_head_t sd_quota_wait;
768 struct list_head sd_trunc_list;
769 spinlock_t sd_trunc_lock;
770
771 unsigned int sd_quota_slots;
772 unsigned long *sd_quota_bitmap;
773 spinlock_t sd_bitmap_lock;
774
775 u64 sd_quota_sync_gen;
776
777
778
779 struct address_space sd_aspace;
780
781 spinlock_t sd_log_lock;
782
783 struct gfs2_trans *sd_log_tr;
784 unsigned int sd_log_blks_reserved;
785 int sd_log_commited_revoke;
786
787 atomic_t sd_log_pinned;
788 unsigned int sd_log_num_revoke;
789
790 struct list_head sd_log_le_revoke;
791 struct list_head sd_log_le_ordered;
792 spinlock_t sd_ordered_lock;
793
794 atomic_t sd_log_thresh1;
795 atomic_t sd_log_thresh2;
796 atomic_t sd_log_blks_free;
797 wait_queue_head_t sd_log_waitq;
798 wait_queue_head_t sd_logd_waitq;
799
800 u64 sd_log_sequence;
801 unsigned int sd_log_head;
802 unsigned int sd_log_tail;
803 int sd_log_idle;
804
805 struct rw_semaphore sd_log_flush_lock;
806 atomic_t sd_log_in_flight;
807 struct bio *sd_log_bio;
808 wait_queue_head_t sd_log_flush_wait;
809 int sd_log_error;
810
811 atomic_t sd_reserving_log;
812 wait_queue_head_t sd_reserving_log_wait;
813
814 unsigned int sd_log_flush_head;
815 u64 sd_log_flush_wrapped;
816
817 spinlock_t sd_ail_lock;
818 struct list_head sd_ail1_list;
819 struct list_head sd_ail2_list;
820
821
822 struct gfs2_holder sd_freeze_gh;
823 atomic_t sd_freeze_state;
824 struct mutex sd_freeze_mutex;
825
826 char sd_fsname[GFS2_FSNAME_LEN];
827 char sd_table_name[GFS2_FSNAME_LEN];
828 char sd_proto_name[GFS2_FSNAME_LEN];
829
830
831
832 unsigned long sd_last_warning;
833 struct dentry *debugfs_dir;
834 struct dentry *debugfs_dentry_glocks;
835 struct dentry *debugfs_dentry_glstats;
836 struct dentry *debugfs_dentry_sbstats;
837};
838
839static inline void gfs2_glstats_inc(struct gfs2_glock *gl, int which)
840{
841 gl->gl_stats.stats[which]++;
842}
843
844static inline void gfs2_sbstats_inc(const struct gfs2_glock *gl, int which)
845{
846 const struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
847 preempt_disable();
848 this_cpu_ptr(sdp->sd_lkstats)->lkstats[gl->gl_name.ln_type].stats[which]++;
849 preempt_enable();
850}
851
852#endif
853
854