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