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