1
2
3
4
5
6
7#ifndef __INCORE_DOT_H__
8#define __INCORE_DOT_H__
9
10#include <linux/fs.h>
11#include <linux/kobject.h>
12#include <linux/workqueue.h>
13#include <linux/dlm.h>
14#include <linux/buffer_head.h>
15#include <linux/rcupdate.h>
16#include <linux/rculist_bl.h>
17#include <linux/completion.h>
18#include <linux/rbtree.h>
19#include <linux/ktime.h>
20#include <linux/percpu.h>
21#include <linux/lockref.h>
22#include <linux/rhashtable.h>
23#include <linux/mutex.h>
24
25#define DIO_WAIT 0x00000010
26#define DIO_METADATA 0x00000020
27
28struct gfs2_log_operations;
29struct gfs2_bufdata;
30struct gfs2_holder;
31struct gfs2_glock;
32struct gfs2_quota_data;
33struct gfs2_trans;
34struct gfs2_jdesc;
35struct gfs2_sbd;
36struct lm_lockops;
37
38typedef void (*gfs2_glop_bh_t) (struct gfs2_glock *gl, unsigned int ret);
39
40struct gfs2_log_header_host {
41 u64 lh_sequence;
42 u32 lh_flags;
43 u32 lh_tail;
44 u32 lh_blkno;
45
46 s64 lh_local_total;
47 s64 lh_local_free;
48 s64 lh_local_dinodes;
49};
50
51
52
53
54
55
56struct gfs2_log_operations {
57 void (*lo_before_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
58 void (*lo_after_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
59 void (*lo_before_scan) (struct gfs2_jdesc *jd,
60 struct gfs2_log_header_host *head, int pass);
61 int (*lo_scan_elements) (struct gfs2_jdesc *jd, unsigned int start,
62 struct gfs2_log_descriptor *ld, __be64 *ptr,
63 int pass);
64 void (*lo_after_scan) (struct gfs2_jdesc *jd, int error, int pass);
65 const char *lo_name;
66};
67
68#define GBF_FULL 1
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91struct gfs2_bitmap {
92 struct buffer_head *bi_bh;
93 char *bi_clone;
94 unsigned long bi_flags;
95 u32 bi_offset;
96 u32 bi_start;
97 u32 bi_bytes;
98 u32 bi_blocks;
99};
100
101struct gfs2_rgrpd {
102 struct rb_node rd_node;
103 struct gfs2_glock *rd_gl;
104 u64 rd_addr;
105 u64 rd_data0;
106 u32 rd_length;
107 u32 rd_data;
108 u32 rd_bitbytes;
109 u32 rd_free;
110 u32 rd_requested;
111 u32 rd_reserved;
112 u32 rd_free_clone;
113 u32 rd_dinodes;
114 u64 rd_igeneration;
115 struct gfs2_bitmap *rd_bits;
116 struct gfs2_sbd *rd_sbd;
117 struct gfs2_rgrp_lvb *rd_rgl;
118 u32 rd_last_alloc;
119 u32 rd_flags;
120 u32 rd_extfail_pt;
121#define GFS2_RDF_CHECK 0x10000000
122#define GFS2_RDF_UPTODATE 0x20000000
123#define GFS2_RDF_ERROR 0x40000000
124#define GFS2_RDF_PREFERRED 0x80000000
125#define GFS2_RDF_MASK 0xf0000000
126 spinlock_t rd_rsspin;
127 struct mutex rd_mutex;
128 struct rb_root rd_rstree;
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
148 struct gfs2_trans *bd_tr;
149 struct list_head bd_ail_st_list;
150 struct list_head bd_ail_gl_list;
151};
152
153
154
155
156
157
158#define GDLM_STRNAME_BYTES 25
159#define GDLM_LVB_SIZE 32
160
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
192enum {
193 DFL_BLOCK_LOCKS = 0,
194 DFL_NO_DLM_OPS = 1,
195 DFL_FIRST_MOUNT = 2,
196 DFL_FIRST_MOUNT_DONE = 3,
197 DFL_MOUNT_DONE = 4,
198 DFL_UNMOUNT = 5,
199 DFL_DLM_RECOVERY = 6,
200};
201
202
203
204
205
206struct lm_lockname {
207 u64 ln_number;
208 struct gfs2_sbd *ln_sbd;
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 int (*go_sync) (struct gfs2_glock *gl);
220 int (*go_xmote_bh)(struct gfs2_glock *gl);
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_dump)(struct seq_file *seq, struct gfs2_glock *gl,
225 const char *fs_id_buf);
226 void (*go_callback)(struct gfs2_glock *gl, bool remote);
227 void (*go_free)(struct gfs2_glock *gl);
228 const int go_subclass;
229 const int go_type;
230 const unsigned long go_flags;
231#define GLOF_ASPACE 1
232#define GLOF_LVB 2
233#define GLOF_LRU 4
234#define GLOF_NONDISK 8
235};
236
237enum {
238 GFS2_LKS_SRTT = 0,
239 GFS2_LKS_SRTTVAR = 1,
240 GFS2_LKS_SRTTB = 2,
241 GFS2_LKS_SRTTVARB = 3,
242 GFS2_LKS_SIRT = 4,
243 GFS2_LKS_SIRTVAR = 5,
244 GFS2_LKS_DCOUNT = 6,
245 GFS2_LKS_QCOUNT = 7,
246 GFS2_NR_LKSTATS
247};
248
249struct gfs2_lkstats {
250 u64 stats[GFS2_NR_LKSTATS];
251};
252
253enum {
254
255 HIF_HOLDER = 6,
256 HIF_FIRST = 7,
257 HIF_WAIT = 10,
258};
259
260struct gfs2_holder {
261 struct list_head gh_list;
262
263 struct gfs2_glock *gh_gl;
264 struct pid *gh_owner_pid;
265 u16 gh_flags;
266 u16 gh_state;
267
268 int gh_error;
269 unsigned long gh_iflags;
270 unsigned long gh_ip;
271};
272
273
274#define GFS2_MAXQUOTAS 2
275
276struct gfs2_qadata {
277
278 struct gfs2_quota_data *qa_qd[2 * GFS2_MAXQUOTAS];
279 struct gfs2_holder qa_qd_ghs[2 * GFS2_MAXQUOTAS];
280 unsigned int qa_qd_num;
281 int qa_ref;
282};
283
284
285
286
287
288
289
290
291
292
293struct gfs2_blkreserv {
294 struct rb_node rs_node;
295 struct gfs2_rgrpd *rs_rgd;
296 u64 rs_start;
297 u32 rs_requested;
298 u32 rs_reserved;
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_LRU = 13,
329 GLF_OBJECT = 14,
330 GLF_BLOCKING = 15,
331 GLF_PENDING_DELETE = 17,
332 GLF_FREEING = 18,
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
365 struct {
366 struct delayed_work gl_delete;
367 u64 gl_no_formal_ino;
368 };
369 struct rcu_head gl_rcu;
370 struct rhash_head gl_node;
371};
372
373enum {
374 GIF_INVALID = 0,
375 GIF_QD_LOCKED = 1,
376 GIF_ALLOC_FAILED = 2,
377 GIF_SW_PAGED = 3,
378 GIF_FREE_VFS_INODE = 5,
379 GIF_GLOP_PENDING = 6,
380 GIF_DEFERRED_DELETE = 7,
381};
382
383struct gfs2_inode {
384 struct inode i_inode;
385 u64 i_no_addr;
386 u64 i_no_formal_ino;
387 u64 i_generation;
388 u64 i_eattr;
389 unsigned long i_flags;
390 struct gfs2_glock *i_gl;
391 struct gfs2_holder i_iopen_gh;
392 struct gfs2_holder i_gh;
393 struct gfs2_qadata *i_qadata;
394 struct gfs2_holder i_rgd_gh;
395 struct gfs2_blkreserv i_res;
396 u64 i_goal;
397 atomic_t i_sizehint;
398 struct rw_semaphore i_rw_mutex;
399 struct list_head i_ordered;
400 struct list_head i_trunc_list;
401 __be64 *i_hash_cache;
402 u32 i_entries;
403 u32 i_diskflags;
404 u8 i_height;
405 u8 i_depth;
406 u16 i_rahead;
407};
408
409
410
411
412
413static inline struct gfs2_inode *GFS2_I(struct inode *inode)
414{
415 return container_of(inode, struct gfs2_inode, i_inode);
416}
417
418static inline struct gfs2_sbd *GFS2_SB(const struct inode *inode)
419{
420 return inode->i_sb->s_fs_info;
421}
422
423struct gfs2_file {
424 struct mutex f_fl_mutex;
425 struct gfs2_holder f_fl_gh;
426};
427
428struct gfs2_revoke_replay {
429 struct list_head rr_list;
430 u64 rr_blkno;
431 unsigned int rr_where;
432};
433
434enum {
435 QDF_CHANGE = 1,
436 QDF_LOCKED = 2,
437 QDF_REFRESH = 3,
438 QDF_QMSG_QUIET = 4,
439};
440
441struct gfs2_quota_data {
442 struct hlist_bl_node qd_hlist;
443 struct list_head qd_list;
444 struct kqid qd_id;
445 struct gfs2_sbd *qd_sbd;
446 struct lockref qd_lockref;
447 struct list_head qd_lru;
448 unsigned qd_hash;
449
450 unsigned long qd_flags;
451
452 s64 qd_change;
453 s64 qd_change_sync;
454
455 unsigned int qd_slot;
456 unsigned int qd_slot_count;
457
458 struct buffer_head *qd_bh;
459 struct gfs2_quota_change *qd_bh_qc;
460 unsigned int qd_bh_count;
461
462 struct gfs2_glock *qd_gl;
463 struct gfs2_quota_lvb qd_qb;
464
465 u64 qd_sync_gen;
466 unsigned long qd_last_warn;
467 struct rcu_head qd_rcu;
468};
469
470enum {
471 TR_TOUCHED = 1,
472 TR_ATTACHED = 2,
473 TR_ONSTACK = 3,
474};
475
476struct gfs2_trans {
477 unsigned long tr_ip;
478
479 unsigned int tr_blocks;
480 unsigned int tr_revokes;
481 unsigned int tr_reserved;
482 unsigned long tr_flags;
483
484 unsigned int tr_num_buf_new;
485 unsigned int tr_num_databuf_new;
486 unsigned int tr_num_buf_rm;
487 unsigned int tr_num_databuf_rm;
488 unsigned int tr_num_revoke;
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 struct bio *jd_log_bio;
514 unsigned long jd_flags;
515#define JDF_RECOVERY 1
516 unsigned int jd_jid;
517 u32 jd_blocks;
518 int jd_recover_error;
519
520
521 unsigned int jd_found_blocks;
522 unsigned int jd_found_revokes;
523 unsigned int jd_replayed_blocks;
524
525 struct list_head jd_revoke_list;
526 unsigned int jd_replay_tail;
527
528 u64 jd_no_addr;
529};
530
531struct gfs2_statfs_change_host {
532 s64 sc_total;
533 s64 sc_free;
534 s64 sc_dinodes;
535};
536
537#define GFS2_QUOTA_DEFAULT GFS2_QUOTA_OFF
538#define GFS2_QUOTA_OFF 0
539#define GFS2_QUOTA_ACCOUNT 1
540#define GFS2_QUOTA_ON 2
541
542#define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED
543#define GFS2_DATA_WRITEBACK 1
544#define GFS2_DATA_ORDERED 2
545
546#define GFS2_ERRORS_DEFAULT GFS2_ERRORS_WITHDRAW
547#define GFS2_ERRORS_WITHDRAW 0
548#define GFS2_ERRORS_CONTINUE 1
549#define GFS2_ERRORS_RO 2
550#define GFS2_ERRORS_PANIC 3
551
552struct gfs2_args {
553 char ar_lockproto[GFS2_LOCKNAME_LEN];
554 char ar_locktable[GFS2_LOCKNAME_LEN];
555 char ar_hostdata[GFS2_LOCKNAME_LEN];
556 unsigned int ar_spectator:1;
557 unsigned int ar_localflocks:1;
558 unsigned int ar_debug:1;
559 unsigned int ar_posix_acl:1;
560 unsigned int ar_quota:2;
561 unsigned int ar_suiddir:1;
562 unsigned int ar_data:2;
563 unsigned int ar_meta:1;
564 unsigned int ar_discard:1;
565 unsigned int ar_errors:2;
566 unsigned int ar_nobarrier:1;
567 unsigned int ar_rgrplvb:1;
568 unsigned int ar_got_rgrplvb:1;
569 unsigned int ar_loccookie:1;
570
571 s32 ar_commit;
572 s32 ar_statfs_quantum;
573 s32 ar_quota_quantum;
574 s32 ar_statfs_percent;
575};
576
577struct gfs2_tune {
578 spinlock_t gt_spin;
579
580 unsigned int gt_logd_secs;
581
582 unsigned int gt_quota_warn_period;
583 unsigned int gt_quota_scale_num;
584 unsigned int gt_quota_scale_den;
585 unsigned int gt_quota_quantum;
586 unsigned int gt_new_files_jdata;
587 unsigned int gt_max_readahead;
588 unsigned int gt_complain_secs;
589 unsigned int gt_statfs_quantum;
590 unsigned int gt_statfs_slow;
591};
592
593enum {
594 SDF_JOURNAL_CHECKED = 0,
595 SDF_JOURNAL_LIVE = 1,
596 SDF_WITHDRAWN = 2,
597 SDF_NOBARRIERS = 3,
598 SDF_NORECOVERY = 4,
599 SDF_DEMOTE = 5,
600 SDF_NOJOURNALID = 6,
601 SDF_RORECOVERY = 7,
602 SDF_SKIP_DLM_UNLOCK = 8,
603 SDF_FORCE_AIL_FLUSH = 9,
604 SDF_FS_FROZEN = 10,
605 SDF_WITHDRAWING = 11,
606 SDF_WITHDRAW_IN_PROG = 12,
607 SDF_REMOTE_WITHDRAW = 13,
608 SDF_WITHDRAW_RECOVERY = 14,
609
610};
611
612enum gfs2_freeze_state {
613 SFS_UNFROZEN = 0,
614 SFS_STARTING_FREEZE = 1,
615 SFS_FROZEN = 2,
616};
617
618#define GFS2_FSNAME_LEN 256
619
620struct gfs2_inum_host {
621 u64 no_formal_ino;
622 u64 no_addr;
623};
624
625struct gfs2_sb_host {
626 u32 sb_magic;
627 u32 sb_type;
628
629 u32 sb_fs_format;
630 u32 sb_multihost_format;
631 u32 sb_bsize;
632 u32 sb_bsize_shift;
633
634 struct gfs2_inum_host sb_master_dir;
635 struct gfs2_inum_host sb_root_dir;
636
637 char sb_lockproto[GFS2_LOCKNAME_LEN];
638 char sb_locktable[GFS2_LOCKNAME_LEN];
639};
640
641
642
643
644
645
646
647
648
649
650struct lm_lockstruct {
651 int ls_jid;
652 unsigned int ls_first;
653 const struct lm_lockops *ls_ops;
654 dlm_lockspace_t *ls_dlm;
655
656 int ls_recover_jid_done;
657 int ls_recover_jid_status;
658
659 struct dlm_lksb ls_mounted_lksb;
660 struct dlm_lksb ls_control_lksb;
661 char ls_control_lvb[GDLM_LVB_SIZE];
662 struct completion ls_sync_wait;
663 char *ls_lvb_bits;
664
665 spinlock_t ls_recover_spin;
666 unsigned long ls_recover_flags;
667 uint32_t ls_recover_mount;
668 uint32_t ls_recover_start;
669 uint32_t ls_recover_block;
670 uint32_t ls_recover_size;
671 uint32_t *ls_recover_submit;
672 uint32_t *ls_recover_result;
673};
674
675struct gfs2_pcpu_lkstats {
676
677 struct gfs2_lkstats lkstats[10];
678};
679
680
681struct local_statfs_inode {
682 struct list_head si_list;
683 struct inode *si_sc_inode;
684 unsigned int si_jid;
685};
686
687struct gfs2_sbd {
688 struct super_block *sd_vfs;
689 struct gfs2_pcpu_lkstats __percpu *sd_lkstats;
690 struct kobject sd_kobj;
691 struct completion sd_kobj_unregister;
692 unsigned long sd_flags;
693 struct gfs2_sb_host sd_sb;
694
695
696
697 u32 sd_fsb2bb;
698 u32 sd_fsb2bb_shift;
699 u32 sd_diptrs;
700 u32 sd_inptrs;
701 u32 sd_ldptrs;
702 u32 sd_jbsize;
703 u32 sd_hash_bsize;
704 u32 sd_hash_bsize_shift;
705 u32 sd_hash_ptrs;
706 u32 sd_qc_per_block;
707 u32 sd_blocks_per_bitmap;
708 u32 sd_max_dirres;
709 u32 sd_max_height;
710 u64 sd_heightsize[GFS2_MAX_META_HEIGHT + 1];
711 u32 sd_max_dents_per_leaf;
712
713 struct gfs2_args sd_args;
714 struct gfs2_tune sd_tune;
715
716
717
718 struct lm_lockstruct sd_lockstruct;
719 struct gfs2_holder sd_live_gh;
720 struct gfs2_glock *sd_rename_gl;
721 struct gfs2_glock *sd_freeze_gl;
722 struct work_struct sd_freeze_work;
723 wait_queue_head_t sd_glock_wait;
724 wait_queue_head_t sd_async_glock_wait;
725 atomic_t sd_glock_disposal;
726 struct completion sd_locking_init;
727 struct completion sd_wdack;
728 struct delayed_work sd_control_work;
729
730
731
732 struct dentry *sd_master_dir;
733 struct dentry *sd_root_dir;
734
735 struct inode *sd_jindex;
736 struct inode *sd_statfs_inode;
737 struct inode *sd_sc_inode;
738 struct list_head sd_sc_inodes_list;
739 struct inode *sd_qc_inode;
740 struct inode *sd_rindex;
741 struct inode *sd_quota_inode;
742
743
744
745 spinlock_t sd_statfs_spin;
746 struct gfs2_statfs_change_host sd_statfs_master;
747 struct gfs2_statfs_change_host sd_statfs_local;
748 int sd_statfs_force_sync;
749
750
751
752 int sd_rindex_uptodate;
753 spinlock_t sd_rindex_spin;
754 struct rb_root sd_rindex_tree;
755 unsigned int sd_rgrps;
756 unsigned int sd_max_rg_data;
757
758
759
760 struct list_head sd_jindex_list;
761 spinlock_t sd_jindex_spin;
762 struct mutex sd_jindex_mutex;
763 unsigned int sd_journals;
764
765 struct gfs2_jdesc *sd_jdesc;
766 struct gfs2_holder sd_journal_gh;
767 struct gfs2_holder sd_jinode_gh;
768 struct gfs2_glock *sd_jinode_gl;
769
770 struct gfs2_holder sd_sc_gh;
771 struct gfs2_holder sd_qc_gh;
772
773 struct completion sd_journal_ready;
774
775
776
777 struct task_struct *sd_logd_process;
778 struct task_struct *sd_quotad_process;
779
780
781
782 struct list_head sd_quota_list;
783 atomic_t sd_quota_count;
784 struct mutex sd_quota_mutex;
785 struct mutex sd_quota_sync_mutex;
786 wait_queue_head_t sd_quota_wait;
787 struct list_head sd_trunc_list;
788 spinlock_t sd_trunc_lock;
789
790 unsigned int sd_quota_slots;
791 unsigned long *sd_quota_bitmap;
792 spinlock_t sd_bitmap_lock;
793
794 u64 sd_quota_sync_gen;
795
796
797
798 struct address_space sd_aspace;
799
800 spinlock_t sd_log_lock;
801
802 struct gfs2_trans *sd_log_tr;
803 unsigned int sd_log_blks_reserved;
804
805 atomic_t sd_log_pinned;
806 unsigned int sd_log_num_revoke;
807
808 struct list_head sd_log_revokes;
809 struct list_head sd_log_ordered;
810 spinlock_t sd_ordered_lock;
811
812 atomic_t sd_log_thresh1;
813 atomic_t sd_log_thresh2;
814 atomic_t sd_log_blks_free;
815 atomic_t sd_log_blks_needed;
816 atomic_t sd_log_revokes_available;
817 wait_queue_head_t sd_log_waitq;
818 wait_queue_head_t sd_logd_waitq;
819
820 u64 sd_log_sequence;
821 int sd_log_idle;
822
823 struct rw_semaphore sd_log_flush_lock;
824 atomic_t sd_log_in_flight;
825 wait_queue_head_t sd_log_flush_wait;
826 int sd_log_error;
827 wait_queue_head_t sd_withdraw_wait;
828
829 unsigned int sd_log_tail;
830 unsigned int sd_log_flush_tail;
831 unsigned int sd_log_head;
832 unsigned int sd_log_flush_head;
833
834 spinlock_t sd_ail_lock;
835 struct list_head sd_ail1_list;
836 struct list_head sd_ail2_list;
837
838
839 struct gfs2_holder sd_freeze_gh;
840 atomic_t sd_freeze_state;
841 struct mutex sd_freeze_mutex;
842
843 char sd_fsname[GFS2_FSNAME_LEN + 3 * sizeof(int) + 2];
844 char sd_table_name[GFS2_FSNAME_LEN];
845 char sd_proto_name[GFS2_FSNAME_LEN];
846
847
848
849 unsigned long sd_last_warning;
850 struct dentry *debugfs_dir;
851 unsigned long sd_glock_dqs_held;
852};
853
854static inline void gfs2_glstats_inc(struct gfs2_glock *gl, int which)
855{
856 gl->gl_stats.stats[which]++;
857}
858
859static inline void gfs2_sbstats_inc(const struct gfs2_glock *gl, int which)
860{
861 const struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
862 preempt_disable();
863 this_cpu_ptr(sdp->sd_lkstats)->lkstats[gl->gl_name.ln_type].stats[which]++;
864 preempt_enable();
865}
866
867extern struct gfs2_rgrpd *gfs2_glock2rgrp(struct gfs2_glock *gl);
868
869static inline unsigned gfs2_max_stuffed_size(const struct gfs2_inode *ip)
870{
871 return GFS2_SB(&ip->i_inode)->sd_sb.sb_bsize - sizeof(struct gfs2_dinode);
872}
873
874#endif
875
876