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