xfs: fix type usage
[linux/fpc-iii.git] / fs / gfs2 / incore.h
blob6e18e9793ec46d72742edc701f28e52065995029
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>
24 #include <linux/lockref.h>
25 #include <linux/rhashtable.h>
27 #define DIO_WAIT 0x00000010
28 #define DIO_METADATA 0x00000020
30 struct gfs2_log_operations;
31 struct gfs2_bufdata;
32 struct gfs2_holder;
33 struct gfs2_glock;
34 struct gfs2_quota_data;
35 struct gfs2_trans;
36 struct gfs2_jdesc;
37 struct gfs2_sbd;
38 struct lm_lockops;
40 typedef void (*gfs2_glop_bh_t) (struct gfs2_glock *gl, unsigned int ret);
42 struct gfs2_log_header_host {
43 u64 lh_sequence; /* Sequence number of this transaction */
44 u32 lh_flags; /* GFS2_LOG_HEAD_... */
45 u32 lh_tail; /* Block number of log tail */
46 u32 lh_blkno;
47 u32 lh_hash;
51 * Structure of operations that are associated with each
52 * type of element in the log.
55 struct gfs2_log_operations {
56 void (*lo_before_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
57 void (*lo_after_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
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;
76 u32 bi_blocks;
79 struct gfs2_rgrpd {
80 struct rb_node rd_node; /* Link with superblock */
81 struct gfs2_glock *rd_gl; /* Glock for this rgrp */
82 u64 rd_addr; /* grp block disk address */
83 u64 rd_data0; /* first data location */
84 u32 rd_length; /* length of rgrp header in fs blocks */
85 u32 rd_data; /* num of data blocks in rgrp */
86 u32 rd_bitbytes; /* number of bytes in data bitmaps */
87 u32 rd_free;
88 u32 rd_reserved; /* number of blocks reserved */
89 u32 rd_free_clone;
90 u32 rd_dinodes;
91 u64 rd_igeneration;
92 struct gfs2_bitmap *rd_bits;
93 struct gfs2_sbd *rd_sbd;
94 struct gfs2_rgrp_lvb *rd_rgl;
95 u32 rd_last_alloc;
96 u32 rd_flags;
97 u32 rd_extfail_pt; /* extent failure point */
98 #define GFS2_RDF_CHECK 0x10000000 /* check for unlinked inodes */
99 #define GFS2_RDF_UPTODATE 0x20000000 /* rg is up to date */
100 #define GFS2_RDF_ERROR 0x40000000 /* error in rg */
101 #define GFS2_RDF_PREFERRED 0x80000000 /* This rgrp is preferred */
102 #define GFS2_RDF_MASK 0xf0000000 /* mask for internal flags */
103 spinlock_t rd_rsspin; /* protects reservation related vars */
104 struct rb_root rd_rstree; /* multi-block reservation tree */
107 struct gfs2_rbm {
108 struct gfs2_rgrpd *rgd;
109 u32 offset; /* The offset is bitmap relative */
110 int bii; /* Bitmap index */
113 static inline struct gfs2_bitmap *rbm_bi(const struct gfs2_rbm *rbm)
115 return rbm->rgd->rd_bits + rbm->bii;
118 static inline u64 gfs2_rbm_to_block(const struct gfs2_rbm *rbm)
120 return rbm->rgd->rd_data0 + (rbm_bi(rbm)->bi_start * GFS2_NBBY) +
121 rbm->offset;
124 static inline bool gfs2_rbm_eq(const struct gfs2_rbm *rbm1,
125 const struct gfs2_rbm *rbm2)
127 return (rbm1->rgd == rbm2->rgd) && (rbm1->bii == rbm2->bii) &&
128 (rbm1->offset == rbm2->offset);
131 enum gfs2_state_bits {
132 BH_Pinned = BH_PrivateStart,
133 BH_Escaped = BH_PrivateStart + 1,
134 BH_Zeronew = BH_PrivateStart + 2,
137 BUFFER_FNS(Pinned, pinned)
138 TAS_BUFFER_FNS(Pinned, pinned)
139 BUFFER_FNS(Escaped, escaped)
140 TAS_BUFFER_FNS(Escaped, escaped)
141 BUFFER_FNS(Zeronew, zeronew)
142 TAS_BUFFER_FNS(Zeronew, zeronew)
144 struct gfs2_bufdata {
145 struct buffer_head *bd_bh;
146 struct gfs2_glock *bd_gl;
147 u64 bd_blkno;
149 struct list_head bd_list;
150 const struct gfs2_log_operations *bd_ops;
152 struct gfs2_trans *bd_tr;
153 struct list_head bd_ail_st_list;
154 struct list_head bd_ail_gl_list;
158 * Internally, we prefix things with gdlm_ and GDLM_ (for gfs-dlm) since a
159 * prefix of lock_dlm_ gets awkward.
162 #define GDLM_STRNAME_BYTES 25
163 #define GDLM_LVB_SIZE 32
166 * ls_recover_flags:
168 * DFL_BLOCK_LOCKS: dlm is in recovery and will grant locks that had been
169 * held by failed nodes whose journals need recovery. Those locks should
170 * only be used for journal recovery until the journal recovery is done.
171 * This is set by the dlm recover_prep callback and cleared by the
172 * gfs2_control thread when journal recovery is complete. To avoid
173 * races between recover_prep setting and gfs2_control clearing, recover_spin
174 * is held while changing this bit and reading/writing recover_block
175 * and recover_start.
177 * DFL_NO_DLM_OPS: dlm lockspace ops/callbacks are not being used.
179 * DFL_FIRST_MOUNT: this node is the first to mount this fs and is doing
180 * recovery of all journals before allowing other nodes to mount the fs.
181 * This is cleared when FIRST_MOUNT_DONE is set.
183 * DFL_FIRST_MOUNT_DONE: this node was the first mounter, and has finished
184 * recovery of all journals, and now allows other nodes to mount the fs.
186 * DFL_MOUNT_DONE: gdlm_mount has completed successfully and cleared
187 * BLOCK_LOCKS for the first time. The gfs2_control thread should now
188 * control clearing BLOCK_LOCKS for further recoveries.
190 * DFL_UNMOUNT: gdlm_unmount sets to keep sdp off gfs2_control_wq.
192 * DFL_DLM_RECOVERY: set while dlm is in recovery, between recover_prep()
193 * and recover_done(), i.e. set while recover_block == recover_start.
196 enum {
197 DFL_BLOCK_LOCKS = 0,
198 DFL_NO_DLM_OPS = 1,
199 DFL_FIRST_MOUNT = 2,
200 DFL_FIRST_MOUNT_DONE = 3,
201 DFL_MOUNT_DONE = 4,
202 DFL_UNMOUNT = 5,
203 DFL_DLM_RECOVERY = 6,
207 * We are using struct lm_lockname as an rhashtable key. Avoid holes within
208 * the struct; padding at the end is fine.
210 struct lm_lockname {
211 u64 ln_number;
212 struct gfs2_sbd *ln_sbd;
213 unsigned int ln_type;
216 #define lm_name_equal(name1, name2) \
217 (((name1)->ln_number == (name2)->ln_number) && \
218 ((name1)->ln_type == (name2)->ln_type) && \
219 ((name1)->ln_sbd == (name2)->ln_sbd))
222 struct gfs2_glock_operations {
223 void (*go_sync) (struct gfs2_glock *gl);
224 int (*go_xmote_bh) (struct gfs2_glock *gl, struct gfs2_holder *gh);
225 void (*go_inval) (struct gfs2_glock *gl, int flags);
226 int (*go_demote_ok) (const struct gfs2_glock *gl);
227 int (*go_lock) (struct gfs2_holder *gh);
228 void (*go_unlock) (struct gfs2_holder *gh);
229 void (*go_dump)(struct seq_file *seq, const struct gfs2_glock *gl);
230 void (*go_callback)(struct gfs2_glock *gl, bool remote);
231 const int go_type;
232 const unsigned long go_flags;
233 #define GLOF_ASPACE 1
234 #define GLOF_LVB 2
235 #define GLOF_LRU 4
238 enum {
239 GFS2_LKS_SRTT = 0, /* Non blocking smoothed round trip time */
240 GFS2_LKS_SRTTVAR = 1, /* Non blocking smoothed variance */
241 GFS2_LKS_SRTTB = 2, /* Blocking smoothed round trip time */
242 GFS2_LKS_SRTTVARB = 3, /* Blocking smoothed variance */
243 GFS2_LKS_SIRT = 4, /* Smoothed Inter-request time */
244 GFS2_LKS_SIRTVAR = 5, /* Smoothed Inter-request variance */
245 GFS2_LKS_DCOUNT = 6, /* Count of dlm requests */
246 GFS2_LKS_QCOUNT = 7, /* Count of gfs2_holder queues */
247 GFS2_NR_LKSTATS
250 struct gfs2_lkstats {
251 u64 stats[GFS2_NR_LKSTATS];
254 enum {
255 /* States */
256 HIF_HOLDER = 6, /* Set for gh that "holds" the glock */
257 HIF_FIRST = 7,
258 HIF_WAIT = 10,
261 struct gfs2_holder {
262 struct list_head gh_list;
264 struct gfs2_glock *gh_gl;
265 struct pid *gh_owner_pid;
266 u16 gh_flags;
267 u16 gh_state;
269 int gh_error;
270 unsigned long gh_iflags; /* HIF_... */
271 unsigned long gh_ip;
274 /* Number of quota types we support */
275 #define GFS2_MAXQUOTAS 2
277 struct gfs2_qadata { /* quota allocation data */
278 /* Quota stuff */
279 struct gfs2_quota_data *qa_qd[2 * GFS2_MAXQUOTAS];
280 struct gfs2_holder qa_qd_ghs[2 * GFS2_MAXQUOTAS];
281 unsigned int qa_qd_num;
284 /* Resource group multi-block reservation, in order of appearance:
286 Step 1. Function prepares to write, allocates a mb, sets the size hint.
287 Step 2. User calls inplace_reserve to target an rgrp, sets the rgrp info
288 Step 3. Function get_local_rgrp locks the rgrp, determines which bits to use
289 Step 4. Bits are assigned from the rgrp based on either the reservation
290 or wherever it can.
293 struct gfs2_blkreserv {
294 /* components used during write (step 1): */
295 atomic_t rs_sizehint; /* hint of the write size */
297 struct gfs2_holder rs_rgd_gh; /* Filled in by get_local_rgrp */
298 struct rb_node rs_node; /* link to other block reservations */
299 struct gfs2_rbm rs_rbm; /* Start of reservation */
300 u32 rs_free; /* how many blocks are still free */
301 u64 rs_inum; /* Inode number for reservation */
305 * Allocation parameters
306 * @target: The number of blocks we'd ideally like to allocate
307 * @aflags: The flags (e.g. Orlov flag)
309 * The intent is to gradually expand this structure over time in
310 * order to give more information, e.g. alignment, min extent size
311 * to the allocation code.
313 struct gfs2_alloc_parms {
314 u64 target;
315 u32 min_target;
316 u32 aflags;
317 u64 allowed;
320 enum {
321 GLF_LOCK = 1,
322 GLF_DEMOTE = 3,
323 GLF_PENDING_DEMOTE = 4,
324 GLF_DEMOTE_IN_PROGRESS = 5,
325 GLF_DIRTY = 6,
326 GLF_LFLUSH = 7,
327 GLF_INVALIDATE_IN_PROGRESS = 8,
328 GLF_REPLY_PENDING = 9,
329 GLF_INITIAL = 10,
330 GLF_FROZEN = 11,
331 GLF_QUEUED = 12,
332 GLF_LRU = 13,
333 GLF_OBJECT = 14, /* Used only for tracing */
334 GLF_BLOCKING = 15,
335 GLF_INODE_CREATING = 16, /* Inode creation occurring */
338 struct gfs2_glock {
339 unsigned long gl_flags; /* GLF_... */
340 struct lm_lockname gl_name;
342 struct lockref gl_lockref;
344 /* State fields protected by gl_lockref.lock */
345 unsigned int gl_state:2, /* Current state */
346 gl_target:2, /* Target state */
347 gl_demote_state:2, /* State requested by remote node */
348 gl_req:2, /* State in last dlm request */
349 gl_reply:8; /* Last reply from the dlm */
351 unsigned long gl_demote_time; /* time of first demote request */
352 long gl_hold_time;
353 struct list_head gl_holders;
355 const struct gfs2_glock_operations *gl_ops;
356 ktime_t gl_dstamp;
357 struct gfs2_lkstats gl_stats;
358 struct dlm_lksb gl_lksb;
359 unsigned long gl_tchange;
360 void *gl_object;
362 struct list_head gl_lru;
363 struct list_head gl_ail_list;
364 atomic_t gl_ail_count;
365 atomic_t gl_revokes;
366 struct delayed_work gl_work;
367 union {
368 /* For inode and iopen glocks only */
369 struct work_struct gl_delete;
370 /* For rgrp glocks only */
371 struct {
372 loff_t start;
373 loff_t end;
374 } gl_vm;
376 struct rcu_head gl_rcu;
377 struct rhash_head gl_node;
380 #define GFS2_MIN_LVB_SIZE 32 /* Min size of LVB that gfs2 supports */
382 enum {
383 GIF_INVALID = 0,
384 GIF_QD_LOCKED = 1,
385 GIF_ALLOC_FAILED = 2,
386 GIF_SW_PAGED = 3,
387 GIF_ORDERED = 4,
388 GIF_FREE_VFS_INODE = 5,
389 GIF_GLOP_PENDING = 6,
392 struct gfs2_inode {
393 struct inode i_inode;
394 u64 i_no_addr;
395 u64 i_no_formal_ino;
396 u64 i_generation;
397 u64 i_eattr;
398 unsigned long i_flags; /* GIF_... */
399 struct gfs2_glock *i_gl; /* Move into i_gh? */
400 struct gfs2_holder i_iopen_gh;
401 struct gfs2_holder i_gh; /* for prepare/commit_write only */
402 struct gfs2_qadata *i_qadata; /* quota allocation data */
403 struct gfs2_blkreserv i_res; /* rgrp multi-block reservation */
404 struct gfs2_rgrpd *i_rgd;
405 u64 i_goal; /* goal block for allocations */
406 struct rw_semaphore i_rw_mutex;
407 struct list_head i_ordered;
408 struct list_head i_trunc_list;
409 __be64 *i_hash_cache;
410 u32 i_entries;
411 u32 i_diskflags;
412 u8 i_height;
413 u8 i_depth;
414 u16 i_rahead;
418 * Since i_inode is the first element of struct gfs2_inode,
419 * this is effectively a cast.
421 static inline struct gfs2_inode *GFS2_I(struct inode *inode)
423 return container_of(inode, struct gfs2_inode, i_inode);
426 static inline struct gfs2_sbd *GFS2_SB(const struct inode *inode)
428 return inode->i_sb->s_fs_info;
431 struct gfs2_file {
432 struct mutex f_fl_mutex;
433 struct gfs2_holder f_fl_gh;
436 struct gfs2_revoke_replay {
437 struct list_head rr_list;
438 u64 rr_blkno;
439 unsigned int rr_where;
442 enum {
443 QDF_CHANGE = 1,
444 QDF_LOCKED = 2,
445 QDF_REFRESH = 3,
446 QDF_QMSG_QUIET = 4,
449 struct gfs2_quota_data {
450 struct hlist_bl_node qd_hlist;
451 struct list_head qd_list;
452 struct kqid qd_id;
453 struct gfs2_sbd *qd_sbd;
454 struct lockref qd_lockref;
455 struct list_head qd_lru;
456 unsigned qd_hash;
458 unsigned long qd_flags; /* QDF_... */
460 s64 qd_change;
461 s64 qd_change_sync;
463 unsigned int qd_slot;
464 unsigned int qd_slot_count;
466 struct buffer_head *qd_bh;
467 struct gfs2_quota_change *qd_bh_qc;
468 unsigned int qd_bh_count;
470 struct gfs2_glock *qd_gl;
471 struct gfs2_quota_lvb qd_qb;
473 u64 qd_sync_gen;
474 unsigned long qd_last_warn;
475 struct rcu_head qd_rcu;
478 enum {
479 TR_TOUCHED = 1,
480 TR_ATTACHED = 2,
481 TR_ALLOCED = 3,
484 struct gfs2_trans {
485 unsigned long tr_ip;
487 unsigned int tr_blocks;
488 unsigned int tr_revokes;
489 unsigned int tr_reserved;
490 unsigned long tr_flags;
492 unsigned int tr_num_buf_new;
493 unsigned int tr_num_databuf_new;
494 unsigned int tr_num_buf_rm;
495 unsigned int tr_num_databuf_rm;
496 unsigned int tr_num_revoke;
497 unsigned int tr_num_revoke_rm;
499 struct list_head tr_list;
500 struct list_head tr_databuf;
501 struct list_head tr_buf;
503 unsigned int tr_first;
504 struct list_head tr_ail1_list;
505 struct list_head tr_ail2_list;
508 struct gfs2_journal_extent {
509 struct list_head list;
511 unsigned int lblock; /* First logical block */
512 u64 dblock; /* First disk block */
513 u64 blocks;
516 struct gfs2_jdesc {
517 struct list_head jd_list;
518 struct list_head extent_list;
519 unsigned int nr_extents;
520 struct work_struct jd_work;
521 struct inode *jd_inode;
522 unsigned long jd_flags;
523 #define JDF_RECOVERY 1
524 unsigned int jd_jid;
525 unsigned int jd_blocks;
526 int jd_recover_error;
527 /* Replay stuff */
529 unsigned int jd_found_blocks;
530 unsigned int jd_found_revokes;
531 unsigned int jd_replayed_blocks;
533 struct list_head jd_revoke_list;
534 unsigned int jd_replay_tail;
538 struct gfs2_statfs_change_host {
539 s64 sc_total;
540 s64 sc_free;
541 s64 sc_dinodes;
544 #define GFS2_QUOTA_DEFAULT GFS2_QUOTA_OFF
545 #define GFS2_QUOTA_OFF 0
546 #define GFS2_QUOTA_ACCOUNT 1
547 #define GFS2_QUOTA_ON 2
549 #define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED
550 #define GFS2_DATA_WRITEBACK 1
551 #define GFS2_DATA_ORDERED 2
553 #define GFS2_ERRORS_DEFAULT GFS2_ERRORS_WITHDRAW
554 #define GFS2_ERRORS_WITHDRAW 0
555 #define GFS2_ERRORS_CONTINUE 1 /* place holder for future feature */
556 #define GFS2_ERRORS_RO 2 /* place holder for future feature */
557 #define GFS2_ERRORS_PANIC 3
559 struct gfs2_args {
560 char ar_lockproto[GFS2_LOCKNAME_LEN]; /* Name of the Lock Protocol */
561 char ar_locktable[GFS2_LOCKNAME_LEN]; /* Name of the Lock Table */
562 char ar_hostdata[GFS2_LOCKNAME_LEN]; /* Host specific data */
563 unsigned int ar_spectator:1; /* Don't get a journal */
564 unsigned int ar_localflocks:1; /* Let the VFS do flock|fcntl */
565 unsigned int ar_debug:1; /* Oops on errors */
566 unsigned int ar_posix_acl:1; /* Enable posix acls */
567 unsigned int ar_quota:2; /* off/account/on */
568 unsigned int ar_suiddir:1; /* suiddir support */
569 unsigned int ar_data:2; /* ordered/writeback */
570 unsigned int ar_meta:1; /* mount metafs */
571 unsigned int ar_discard:1; /* discard requests */
572 unsigned int ar_errors:2; /* errors=withdraw | panic */
573 unsigned int ar_nobarrier:1; /* do not send barriers */
574 unsigned int ar_rgrplvb:1; /* use lvbs for rgrp info */
575 unsigned int ar_loccookie:1; /* use location based readdir
576 cookies */
577 int ar_commit; /* Commit interval */
578 int ar_statfs_quantum; /* The fast statfs interval */
579 int ar_quota_quantum; /* The quota interval */
580 int ar_statfs_percent; /* The % change to force sync */
583 struct gfs2_tune {
584 spinlock_t gt_spin;
586 unsigned int gt_logd_secs;
588 unsigned int gt_quota_warn_period; /* Secs between quota warn msgs */
589 unsigned int gt_quota_scale_num; /* Numerator */
590 unsigned int gt_quota_scale_den; /* Denominator */
591 unsigned int gt_quota_quantum; /* Secs between syncs to quota file */
592 unsigned int gt_new_files_jdata;
593 unsigned int gt_max_readahead; /* Max bytes to read-ahead from disk */
594 unsigned int gt_complain_secs;
595 unsigned int gt_statfs_quantum;
596 unsigned int gt_statfs_slow;
599 enum {
600 SDF_JOURNAL_CHECKED = 0,
601 SDF_JOURNAL_LIVE = 1,
602 SDF_SHUTDOWN = 2,
603 SDF_NOBARRIERS = 3,
604 SDF_NORECOVERY = 4,
605 SDF_DEMOTE = 5,
606 SDF_NOJOURNALID = 6,
607 SDF_RORECOVERY = 7, /* read only recovery */
608 SDF_SKIP_DLM_UNLOCK = 8,
609 SDF_FORCE_AIL_FLUSH = 9,
612 enum gfs2_freeze_state {
613 SFS_UNFROZEN = 0,
614 SFS_STARTING_FREEZE = 1,
615 SFS_FROZEN = 2,
618 #define GFS2_FSNAME_LEN 256
620 struct gfs2_inum_host {
621 u64 no_formal_ino;
622 u64 no_addr;
625 struct gfs2_sb_host {
626 u32 sb_magic;
627 u32 sb_type;
628 u32 sb_format;
630 u32 sb_fs_format;
631 u32 sb_multihost_format;
632 u32 sb_bsize;
633 u32 sb_bsize_shift;
635 struct gfs2_inum_host sb_master_dir;
636 struct gfs2_inum_host sb_root_dir;
638 char sb_lockproto[GFS2_LOCKNAME_LEN];
639 char sb_locktable[GFS2_LOCKNAME_LEN];
643 * lm_mount() return values
645 * ls_jid - the journal ID this node should use
646 * ls_first - this node is the first to mount the file system
647 * ls_lockspace - lock module's context for this file system
648 * ls_ops - lock module's functions
651 struct lm_lockstruct {
652 int ls_jid;
653 unsigned int ls_first;
654 const struct lm_lockops *ls_ops;
655 dlm_lockspace_t *ls_dlm;
657 int ls_recover_jid_done; /* These two are deprecated, */
658 int ls_recover_jid_status; /* used previously by gfs_controld */
660 struct dlm_lksb ls_mounted_lksb; /* mounted_lock */
661 struct dlm_lksb ls_control_lksb; /* control_lock */
662 char ls_control_lvb[GDLM_LVB_SIZE]; /* control_lock lvb */
663 struct completion ls_sync_wait; /* {control,mounted}_{lock,unlock} */
664 char *ls_lvb_bits;
666 spinlock_t ls_recover_spin; /* protects following fields */
667 unsigned long ls_recover_flags; /* DFL_ */
668 uint32_t ls_recover_mount; /* gen in first recover_done cb */
669 uint32_t ls_recover_start; /* gen in last recover_done cb */
670 uint32_t ls_recover_block; /* copy recover_start in last recover_prep */
671 uint32_t ls_recover_size; /* size of recover_submit, recover_result */
672 uint32_t *ls_recover_submit; /* gen in last recover_slot cb per jid */
673 uint32_t *ls_recover_result; /* result of last jid recovery */
676 struct gfs2_pcpu_lkstats {
677 /* One struct for each glock type */
678 struct gfs2_lkstats lkstats[10];
681 struct gfs2_sbd {
682 struct super_block *sd_vfs;
683 struct gfs2_pcpu_lkstats __percpu *sd_lkstats;
684 struct kobject sd_kobj;
685 unsigned long sd_flags; /* SDF_... */
686 struct gfs2_sb_host sd_sb;
688 /* Constants computed on mount */
690 u32 sd_fsb2bb;
691 u32 sd_fsb2bb_shift;
692 u32 sd_diptrs; /* Number of pointers in a dinode */
693 u32 sd_inptrs; /* Number of pointers in a indirect block */
694 u32 sd_jbsize; /* Size of a journaled data block */
695 u32 sd_hash_bsize; /* sizeof(exhash block) */
696 u32 sd_hash_bsize_shift;
697 u32 sd_hash_ptrs; /* Number of pointers in a hash block */
698 u32 sd_qc_per_block;
699 u32 sd_blocks_per_bitmap;
700 u32 sd_max_dirres; /* Max blocks needed to add a directory entry */
701 u32 sd_max_height; /* Max height of a file's metadata tree */
702 u64 sd_heightsize[GFS2_MAX_META_HEIGHT + 1];
703 u32 sd_max_jheight; /* Max height of journaled file's meta tree */
704 u64 sd_jheightsize[GFS2_MAX_META_HEIGHT + 1];
705 u32 sd_max_dents_per_leaf; /* Max number of dirents in a leaf block */
707 struct gfs2_args sd_args; /* Mount arguments */
708 struct gfs2_tune sd_tune; /* Filesystem tuning structure */
710 /* Lock Stuff */
712 struct lm_lockstruct sd_lockstruct;
713 struct gfs2_holder sd_live_gh;
714 struct gfs2_glock *sd_rename_gl;
715 struct gfs2_glock *sd_freeze_gl;
716 struct work_struct sd_freeze_work;
717 wait_queue_head_t sd_glock_wait;
718 atomic_t sd_glock_disposal;
719 struct completion sd_locking_init;
720 struct completion sd_wdack;
721 struct delayed_work sd_control_work;
723 /* Inode Stuff */
725 struct dentry *sd_master_dir;
726 struct dentry *sd_root_dir;
728 struct inode *sd_jindex;
729 struct inode *sd_statfs_inode;
730 struct inode *sd_sc_inode;
731 struct inode *sd_qc_inode;
732 struct inode *sd_rindex;
733 struct inode *sd_quota_inode;
735 /* StatFS stuff */
737 spinlock_t sd_statfs_spin;
738 struct gfs2_statfs_change_host sd_statfs_master;
739 struct gfs2_statfs_change_host sd_statfs_local;
740 int sd_statfs_force_sync;
742 /* Resource group stuff */
744 int sd_rindex_uptodate;
745 spinlock_t sd_rindex_spin;
746 struct rb_root sd_rindex_tree;
747 unsigned int sd_rgrps;
748 unsigned int sd_max_rg_data;
750 /* Journal index stuff */
752 struct list_head sd_jindex_list;
753 spinlock_t sd_jindex_spin;
754 struct mutex sd_jindex_mutex;
755 unsigned int sd_journals;
757 struct gfs2_jdesc *sd_jdesc;
758 struct gfs2_holder sd_journal_gh;
759 struct gfs2_holder sd_jinode_gh;
761 struct gfs2_holder sd_sc_gh;
762 struct gfs2_holder sd_qc_gh;
764 struct completion sd_journal_ready;
766 /* Daemon stuff */
768 struct task_struct *sd_logd_process;
769 struct task_struct *sd_quotad_process;
771 /* Quota stuff */
773 struct list_head sd_quota_list;
774 atomic_t sd_quota_count;
775 struct mutex sd_quota_mutex;
776 struct mutex sd_quota_sync_mutex;
777 wait_queue_head_t sd_quota_wait;
778 struct list_head sd_trunc_list;
779 spinlock_t sd_trunc_lock;
781 unsigned int sd_quota_slots;
782 unsigned long *sd_quota_bitmap;
783 spinlock_t sd_bitmap_lock;
785 u64 sd_quota_sync_gen;
787 /* Log stuff */
789 struct address_space sd_aspace;
791 spinlock_t sd_log_lock;
793 struct gfs2_trans *sd_log_tr;
794 unsigned int sd_log_blks_reserved;
795 int sd_log_commited_revoke;
797 atomic_t sd_log_pinned;
798 unsigned int sd_log_num_revoke;
800 struct list_head sd_log_le_revoke;
801 struct list_head sd_log_le_ordered;
802 spinlock_t sd_ordered_lock;
804 atomic_t sd_log_thresh1;
805 atomic_t sd_log_thresh2;
806 atomic_t sd_log_blks_free;
807 atomic_t sd_log_blks_needed;
808 wait_queue_head_t sd_log_waitq;
809 wait_queue_head_t sd_logd_waitq;
811 u64 sd_log_sequence;
812 unsigned int sd_log_head;
813 unsigned int sd_log_tail;
814 int sd_log_idle;
816 struct rw_semaphore sd_log_flush_lock;
817 atomic_t sd_log_in_flight;
818 struct bio *sd_log_bio;
819 wait_queue_head_t sd_log_flush_wait;
820 int sd_log_error;
822 atomic_t sd_reserving_log;
823 wait_queue_head_t sd_reserving_log_wait;
825 unsigned int sd_log_flush_head;
827 spinlock_t sd_ail_lock;
828 struct list_head sd_ail1_list;
829 struct list_head sd_ail2_list;
831 /* For quiescing the filesystem */
832 struct gfs2_holder sd_freeze_gh;
833 atomic_t sd_freeze_state;
834 struct mutex sd_freeze_mutex;
836 char sd_fsname[GFS2_FSNAME_LEN + 3 * sizeof(int) + 2];
837 char sd_table_name[GFS2_FSNAME_LEN];
838 char sd_proto_name[GFS2_FSNAME_LEN];
840 /* Debugging crud */
842 unsigned long sd_last_warning;
843 struct dentry *debugfs_dir; /* debugfs directory */
844 struct dentry *debugfs_dentry_glocks;
845 struct dentry *debugfs_dentry_glstats;
846 struct dentry *debugfs_dentry_sbstats;
849 static inline void gfs2_glstats_inc(struct gfs2_glock *gl, int which)
851 gl->gl_stats.stats[which]++;
854 static inline void gfs2_sbstats_inc(const struct gfs2_glock *gl, int which)
856 const struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
857 preempt_disable();
858 this_cpu_ptr(sdp->sd_lkstats)->lkstats[gl->gl_name.ln_type].stats[which]++;
859 preempt_enable();
862 extern struct gfs2_rgrpd *gfs2_glock2rgrp(struct gfs2_glock *gl);
864 #endif /* __INCORE_DOT_H__ */