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