Adding support for MOXA ART SoC. Testing port of linux-2.6.32.60-moxart.
[linux-3.6.7-moxart.git] / fs / gfs2 / incore.h
blobaaecc8085fc55945009c855eda554079cf100b59
1 /*
2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
5 * This copyrighted material is made available to anyone wishing to use,
6 * modify, copy, or redistribute it subject to the terms and conditions
7 * of the GNU General Public License version 2.
8 */
10 #ifndef __INCORE_DOT_H__
11 #define __INCORE_DOT_H__
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>
25 #define DIO_WAIT 0x00000010
26 #define DIO_METADATA 0x00000020
28 struct gfs2_log_operations;
29 struct gfs2_bufdata;
30 struct gfs2_holder;
31 struct gfs2_glock;
32 struct gfs2_quota_data;
33 struct gfs2_trans;
34 struct gfs2_ail;
35 struct gfs2_jdesc;
36 struct gfs2_sbd;
37 struct lm_lockops;
39 typedef void (*gfs2_glop_bh_t) (struct gfs2_glock *gl, unsigned int ret);
41 struct gfs2_log_header_host {
42 u64 lh_sequence; /* Sequence number of this transaction */
43 u32 lh_flags; /* GFS2_LOG_HEAD_... */
44 u32 lh_tail; /* Block number of log tail */
45 u32 lh_blkno;
46 u32 lh_hash;
50 * Structure of operations that are associated with each
51 * type of element in the log.
54 struct 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;
67 #define GBF_FULL 1
69 struct 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;
78 struct gfs2_rgrpd {
79 struct rb_node rd_node; /* Link with superblock */
80 struct gfs2_glock *rd_gl; /* Glock for this rgrp */
81 u64 rd_addr; /* grp block disk address */
82 u64 rd_data0; /* first data location */
83 u32 rd_length; /* length of rgrp header in fs blocks */
84 u32 rd_data; /* num of data blocks in rgrp */
85 u32 rd_bitbytes; /* number of bytes in data bitmaps */
86 u32 rd_free;
87 u32 rd_reserved; /* number of blocks 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 /* check for unlinked inodes */
97 #define GFS2_RDF_UPTODATE 0x20000000 /* rg is up to date */
98 #define GFS2_RDF_ERROR 0x40000000 /* error in rg */
99 #define GFS2_RDF_MASK 0xf0000000 /* mask for internal flags */
100 spinlock_t rd_rsspin; /* protects reservation related vars */
101 struct rb_root rd_rstree; /* multi-block reservation tree */
102 u32 rd_rs_cnt; /* count of current reservations */
105 enum gfs2_state_bits {
106 BH_Pinned = BH_PrivateStart,
107 BH_Escaped = BH_PrivateStart + 1,
108 BH_Zeronew = BH_PrivateStart + 2,
111 BUFFER_FNS(Pinned, pinned)
112 TAS_BUFFER_FNS(Pinned, pinned)
113 BUFFER_FNS(Escaped, escaped)
114 TAS_BUFFER_FNS(Escaped, escaped)
115 BUFFER_FNS(Zeronew, zeronew)
116 TAS_BUFFER_FNS(Zeronew, zeronew)
118 struct gfs2_bufdata {
119 struct buffer_head *bd_bh;
120 struct gfs2_glock *bd_gl;
121 u64 bd_blkno;
123 struct list_head bd_list;
124 const struct gfs2_log_operations *bd_ops;
126 struct gfs2_ail *bd_ail;
127 struct list_head bd_ail_st_list;
128 struct list_head bd_ail_gl_list;
132 * Internally, we prefix things with gdlm_ and GDLM_ (for gfs-dlm) since a
133 * prefix of lock_dlm_ gets awkward.
136 #define GDLM_STRNAME_BYTES 25
137 #define GDLM_LVB_SIZE 32
140 * ls_recover_flags:
142 * DFL_BLOCK_LOCKS: dlm is in recovery and will grant locks that had been
143 * held by failed nodes whose journals need recovery. Those locks should
144 * only be used for journal recovery until the journal recovery is done.
145 * This is set by the dlm recover_prep callback and cleared by the
146 * gfs2_control thread when journal recovery is complete. To avoid
147 * races between recover_prep setting and gfs2_control clearing, recover_spin
148 * is held while changing this bit and reading/writing recover_block
149 * and recover_start.
151 * DFL_NO_DLM_OPS: dlm lockspace ops/callbacks are not being used.
153 * DFL_FIRST_MOUNT: this node is the first to mount this fs and is doing
154 * recovery of all journals before allowing other nodes to mount the fs.
155 * This is cleared when FIRST_MOUNT_DONE is set.
157 * DFL_FIRST_MOUNT_DONE: this node was the first mounter, and has finished
158 * recovery of all journals, and now allows other nodes to mount the fs.
160 * DFL_MOUNT_DONE: gdlm_mount has completed successfully and cleared
161 * BLOCK_LOCKS for the first time. The gfs2_control thread should now
162 * control clearing BLOCK_LOCKS for further recoveries.
164 * DFL_UNMOUNT: gdlm_unmount sets to keep sdp off gfs2_control_wq.
166 * DFL_DLM_RECOVERY: set while dlm is in recovery, between recover_prep()
167 * and recover_done(), i.e. set while recover_block == recover_start.
170 enum {
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,
180 struct lm_lockname {
181 u64 ln_number;
182 unsigned int ln_type;
185 #define lm_name_equal(name1, name2) \
186 (((name1)->ln_number == (name2)->ln_number) && \
187 ((name1)->ln_type == (name2)->ln_type))
190 struct 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
204 enum {
205 GFS2_LKS_SRTT = 0, /* Non blocking smoothed round trip time */
206 GFS2_LKS_SRTTVAR = 1, /* Non blocking smoothed variance */
207 GFS2_LKS_SRTTB = 2, /* Blocking smoothed round trip time */
208 GFS2_LKS_SRTTVARB = 3, /* Blocking smoothed variance */
209 GFS2_LKS_SIRT = 4, /* Smoothed Inter-request time */
210 GFS2_LKS_SIRTVAR = 5, /* Smoothed Inter-request variance */
211 GFS2_LKS_DCOUNT = 6, /* Count of dlm requests */
212 GFS2_LKS_QCOUNT = 7, /* Count of gfs2_holder queues */
213 GFS2_NR_LKSTATS
216 struct gfs2_lkstats {
217 s64 stats[GFS2_NR_LKSTATS];
220 enum {
221 /* States */
222 HIF_HOLDER = 6, /* Set for gh that "holds" the glock */
223 HIF_FIRST = 7,
224 HIF_WAIT = 10,
227 struct gfs2_holder {
228 struct list_head gh_list;
230 struct gfs2_glock *gh_gl;
231 struct pid *gh_owner_pid;
232 unsigned int gh_state;
233 unsigned gh_flags;
235 int gh_error;
236 unsigned long gh_iflags; /* HIF_... */
237 unsigned long gh_ip;
240 /* Resource group multi-block reservation, in order of appearance:
242 Step 1. Function prepares to write, allocates a mb, sets the size hint.
243 Step 2. User calls inplace_reserve to target an rgrp, sets the rgrp info
244 Step 3. Function get_local_rgrp locks the rgrp, determines which bits to use
245 Step 4. Bits are assigned from the rgrp based on either the reservation
246 or wherever it can.
249 struct gfs2_blkreserv {
250 /* components used during write (step 1): */
251 atomic_t rs_sizehint; /* hint of the write size */
253 /* components used during inplace_reserve (step 2): */
254 u32 rs_requested; /* Filled in by caller of gfs2_inplace_reserve() */
256 /* components used during get_local_rgrp (step 3): */
257 struct gfs2_rgrpd *rs_rgd; /* pointer to the gfs2_rgrpd */
258 struct gfs2_holder rs_rgd_gh; /* Filled in by get_local_rgrp */
259 struct rb_node rs_node; /* link to other block reservations */
261 /* components used during block searches and assignments (step 4): */
262 struct gfs2_bitmap *rs_bi; /* bitmap for the current allocation */
263 u32 rs_biblk; /* start block relative to the bi */
264 u32 rs_free; /* how many blocks are still free */
266 /* ancillary quota stuff */
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;
272 enum {
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, /* Used only for tracing */
286 GLF_BLOCKING = 15,
289 struct gfs2_glock {
290 struct hlist_bl_node gl_list;
291 struct gfs2_sbd *gl_sbd;
292 unsigned long gl_flags; /* GLF_... */
293 struct lm_lockname gl_name;
294 atomic_t gl_ref;
296 spinlock_t gl_spin;
298 /* State fields protected by gl_spin */
299 unsigned int gl_state:2, /* Current state */
300 gl_target:2, /* Target state */
301 gl_demote_state:2, /* State requested by remote node */
302 gl_req:2, /* State in last dlm request */
303 gl_reply:8; /* Last reply from the dlm */
305 unsigned int gl_hash;
306 unsigned long gl_demote_time; /* time of first demote request */
307 long gl_hold_time;
308 struct list_head gl_holders;
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;
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;
327 #define GFS2_MIN_LVB_SIZE 32 /* Min size of LVB that gfs2 supports */
329 enum {
330 GIF_INVALID = 0,
331 GIF_QD_LOCKED = 1,
332 GIF_ALLOC_FAILED = 2,
333 GIF_SW_PAGED = 3,
336 struct 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; /* GIF_... */
343 struct gfs2_glock *i_gl; /* Move into i_gh? */
344 struct gfs2_holder i_iopen_gh;
345 struct gfs2_holder i_gh; /* for prepare/commit_write only */
346 struct gfs2_blkreserv *i_res; /* rgrp multi-block reservation */
347 struct gfs2_rgrpd *i_rgd;
348 u64 i_goal; /* goal block for allocations */
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;
359 * Since i_inode is the first element of struct gfs2_inode,
360 * this is effectively a cast.
362 static inline struct gfs2_inode *GFS2_I(struct inode *inode)
364 return container_of(inode, struct gfs2_inode, i_inode);
367 static inline struct gfs2_sbd *GFS2_SB(const struct inode *inode)
369 return inode->i_sb->s_fs_info;
372 struct gfs2_file {
373 struct mutex f_fl_mutex;
374 struct gfs2_holder f_fl_gh;
377 struct gfs2_revoke_replay {
378 struct list_head rr_list;
379 u64 rr_blkno;
380 unsigned int rr_where;
383 enum {
384 QDF_USER = 0,
385 QDF_CHANGE = 1,
386 QDF_LOCKED = 2,
387 QDF_REFRESH = 3,
390 struct gfs2_quota_data {
391 struct list_head qd_list;
392 struct list_head qd_reclaim;
394 atomic_t qd_count;
396 u32 qd_id;
397 unsigned long qd_flags; /* QDF_... */
399 s64 qd_change;
400 s64 qd_change_sync;
402 unsigned int qd_slot;
403 unsigned int qd_slot_count;
405 struct buffer_head *qd_bh;
406 struct gfs2_quota_change *qd_bh_qc;
407 unsigned int qd_bh_count;
409 struct gfs2_glock *qd_gl;
410 struct gfs2_quota_lvb qd_qb;
412 u64 qd_sync_gen;
413 unsigned long qd_last_warn;
416 struct gfs2_trans {
417 unsigned long tr_ip;
419 unsigned int tr_blocks;
420 unsigned int tr_revokes;
421 unsigned int tr_reserved;
423 struct gfs2_holder tr_t_gh;
425 int tr_touched;
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;
435 struct gfs2_ail {
436 struct list_head ai_list;
438 unsigned int ai_first;
439 struct list_head ai_ail1_list;
440 struct list_head ai_ail2_list;
443 struct gfs2_journal_extent {
444 struct list_head extent_list;
446 unsigned int lblock; /* First logical block */
447 u64 dblock; /* First disk block */
448 u64 blocks;
451 struct 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;
463 struct gfs2_statfs_change_host {
464 s64 sc_total;
465 s64 sc_free;
466 s64 sc_dinodes;
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
474 #define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED
475 #define GFS2_DATA_WRITEBACK 1
476 #define GFS2_DATA_ORDERED 2
478 #define GFS2_ERRORS_DEFAULT GFS2_ERRORS_WITHDRAW
479 #define GFS2_ERRORS_WITHDRAW 0
480 #define GFS2_ERRORS_CONTINUE 1 /* place holder for future feature */
481 #define GFS2_ERRORS_RO 2 /* place holder for future feature */
482 #define GFS2_ERRORS_PANIC 3
484 struct gfs2_args {
485 char ar_lockproto[GFS2_LOCKNAME_LEN]; /* Name of the Lock Protocol */
486 char ar_locktable[GFS2_LOCKNAME_LEN]; /* Name of the Lock Table */
487 char ar_hostdata[GFS2_LOCKNAME_LEN]; /* Host specific data */
488 unsigned int ar_spectator:1; /* Don't get a journal */
489 unsigned int ar_localflocks:1; /* Let the VFS do flock|fcntl */
490 unsigned int ar_debug:1; /* Oops on errors */
491 unsigned int ar_posix_acl:1; /* Enable posix acls */
492 unsigned int ar_quota:2; /* off/account/on */
493 unsigned int ar_suiddir:1; /* suiddir support */
494 unsigned int ar_data:2; /* ordered/writeback */
495 unsigned int ar_meta:1; /* mount metafs */
496 unsigned int ar_discard:1; /* discard requests */
497 unsigned int ar_errors:2; /* errors=withdraw | panic */
498 unsigned int ar_nobarrier:1; /* do not send barriers */
499 unsigned int ar_rgrplvb:1; /* use lvbs for rgrp info */
500 int ar_commit; /* Commit interval */
501 int ar_statfs_quantum; /* The fast statfs interval */
502 int ar_quota_quantum; /* The quota interval */
503 int ar_statfs_percent; /* The % change to force sync */
506 struct gfs2_tune {
507 spinlock_t gt_spin;
509 unsigned int gt_logd_secs;
511 unsigned int gt_quota_simul_sync; /* Max quotavals to sync at once */
512 unsigned int gt_quota_warn_period; /* Secs between quota warn msgs */
513 unsigned int gt_quota_scale_num; /* Numerator */
514 unsigned int gt_quota_scale_den; /* Denominator */
515 unsigned int gt_quota_quantum; /* Secs between syncs to quota file */
516 unsigned int gt_new_files_jdata;
517 unsigned int gt_max_readahead; /* Max bytes to read-ahead from disk */
518 unsigned int gt_complain_secs;
519 unsigned int gt_statfs_quantum;
520 unsigned int gt_statfs_slow;
523 enum {
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, /* read only recovery */
534 #define GFS2_FSNAME_LEN 256
536 struct gfs2_inum_host {
537 u64 no_formal_ino;
538 u64 no_addr;
541 struct gfs2_sb_host {
542 u32 sb_magic;
543 u32 sb_type;
544 u32 sb_format;
546 u32 sb_fs_format;
547 u32 sb_multihost_format;
548 u32 sb_bsize;
549 u32 sb_bsize_shift;
551 struct gfs2_inum_host sb_master_dir;
552 struct gfs2_inum_host sb_root_dir;
554 char sb_lockproto[GFS2_LOCKNAME_LEN];
555 char sb_locktable[GFS2_LOCKNAME_LEN];
559 * lm_mount() return values
561 * ls_jid - the journal ID this node should use
562 * ls_first - this node is the first to mount the file system
563 * ls_lockspace - lock module's context for this file system
564 * ls_ops - lock module's functions
567 struct lm_lockstruct {
568 int ls_jid;
569 unsigned int ls_first;
570 const struct lm_lockops *ls_ops;
571 dlm_lockspace_t *ls_dlm;
573 int ls_recover_jid_done; /* These two are deprecated, */
574 int ls_recover_jid_status; /* used previously by gfs_controld */
576 struct dlm_lksb ls_mounted_lksb; /* mounted_lock */
577 struct dlm_lksb ls_control_lksb; /* control_lock */
578 char ls_control_lvb[GDLM_LVB_SIZE]; /* control_lock lvb */
579 struct completion ls_sync_wait; /* {control,mounted}_{lock,unlock} */
581 spinlock_t ls_recover_spin; /* protects following fields */
582 unsigned long ls_recover_flags; /* DFL_ */
583 uint32_t ls_recover_mount; /* gen in first recover_done cb */
584 uint32_t ls_recover_start; /* gen in last recover_done cb */
585 uint32_t ls_recover_block; /* copy recover_start in last recover_prep */
586 uint32_t ls_recover_size; /* size of recover_submit, recover_result */
587 uint32_t *ls_recover_submit; /* gen in last recover_slot cb per jid */
588 uint32_t *ls_recover_result; /* result of last jid recovery */
591 struct gfs2_pcpu_lkstats {
592 /* One struct for each glock type */
593 struct gfs2_lkstats lkstats[10];
596 struct 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; /* SDF_... */
601 struct gfs2_sb_host sd_sb;
603 /* Constants computed on mount */
605 u32 sd_fsb2bb;
606 u32 sd_fsb2bb_shift;
607 u32 sd_diptrs; /* Number of pointers in a dinode */
608 u32 sd_inptrs; /* Number of pointers in a indirect block */
609 u32 sd_jbsize; /* Size of a journaled data block */
610 u32 sd_hash_bsize; /* sizeof(exhash block) */
611 u32 sd_hash_bsize_shift;
612 u32 sd_hash_ptrs; /* Number of pointers in a hash block */
613 u32 sd_qc_per_block;
614 u32 sd_max_dirres; /* Max blocks needed to add a directory entry */
615 u32 sd_max_height; /* Max height of a file's metadata tree */
616 u64 sd_heightsize[GFS2_MAX_META_HEIGHT + 1];
617 u32 sd_max_jheight; /* Max height of journaled file's meta tree */
618 u64 sd_jheightsize[GFS2_MAX_META_HEIGHT + 1];
620 struct gfs2_args sd_args; /* Mount arguments */
621 struct gfs2_tune sd_tune; /* Filesystem tuning structure */
623 /* Lock Stuff */
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;
634 /* Inode Stuff */
636 struct dentry *sd_master_dir;
637 struct dentry *sd_root_dir;
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;
646 /* StatFS stuff */
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;
653 /* Resource group stuff */
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;
661 /* Journal index stuff */
663 struct list_head sd_jindex_list;
664 spinlock_t sd_jindex_spin;
665 struct mutex sd_jindex_mutex;
666 unsigned int sd_journals;
668 struct gfs2_jdesc *sd_jdesc;
669 struct gfs2_holder sd_journal_gh;
670 struct gfs2_holder sd_jinode_gh;
672 struct gfs2_holder sd_sc_gh;
673 struct gfs2_holder sd_qc_gh;
675 /* Daemon stuff */
677 struct task_struct *sd_logd_process;
678 struct task_struct *sd_quotad_process;
680 /* Quota stuff */
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;
689 unsigned int sd_quota_slots;
690 unsigned int sd_quota_chunks;
691 unsigned char **sd_quota_bitmap;
693 u64 sd_quota_sync_gen;
695 /* Log stuff */
697 spinlock_t sd_log_lock;
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;
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;
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;
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;
721 u64 sd_log_sequence;
722 unsigned int sd_log_head;
723 unsigned int sd_log_tail;
724 int sd_log_idle;
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;
732 unsigned int sd_log_flush_head;
733 u64 sd_log_flush_wrapped;
735 spinlock_t sd_ail_lock;
736 struct list_head sd_ail1_list;
737 struct list_head sd_ail2_list;
739 /* Replay stuff */
741 struct list_head sd_revoke_list;
742 unsigned int sd_replay_tail;
744 unsigned int sd_found_blocks;
745 unsigned int sd_found_revokes;
746 unsigned int sd_replayed_blocks;
748 /* For quiescing the filesystem */
750 struct gfs2_holder sd_freeze_gh;
751 struct mutex sd_freeze_lock;
752 unsigned int sd_freeze_count;
754 char sd_fsname[GFS2_FSNAME_LEN];
755 char sd_table_name[GFS2_FSNAME_LEN];
756 char sd_proto_name[GFS2_FSNAME_LEN];
758 /* Debugging crud */
760 unsigned long sd_last_warning;
761 struct dentry *debugfs_dir; /* debugfs directory */
762 struct dentry *debugfs_dentry_glocks;
763 struct dentry *debugfs_dentry_glstats;
764 struct dentry *debugfs_dentry_sbstats;
767 static inline void gfs2_glstats_inc(struct gfs2_glock *gl, int which)
769 gl->gl_stats.stats[which]++;
772 static inline void gfs2_sbstats_inc(const struct gfs2_glock *gl, int which)
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();
780 #endif /* __INCORE_DOT_H__ */