x86/topology: Update the 'cpu cores' field in /proc/cpuinfo correctly across CPU...
[cris-mirror.git] / fs / gfs2 / incore.h
blobe0557b8a590af06fa9e2b5084d9f1b5f32a99f3a
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;
50 * Structure of operations that are associated with each
51 * type of element in the log.
54 struct gfs2_log_operations {
55 void (*lo_before_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
56 void (*lo_after_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
57 void (*lo_before_scan) (struct gfs2_jdesc *jd,
58 struct gfs2_log_header_host *head, int pass);
59 int (*lo_scan_elements) (struct gfs2_jdesc *jd, unsigned int start,
60 struct gfs2_log_descriptor *ld, __be64 *ptr,
61 int pass);
62 void (*lo_after_scan) (struct gfs2_jdesc *jd, int error, int pass);
63 const char *lo_name;
66 #define GBF_FULL 1
68 struct gfs2_bitmap {
69 struct buffer_head *bi_bh;
70 char *bi_clone;
71 unsigned long bi_flags;
72 u32 bi_offset;
73 u32 bi_start;
74 u32 bi_len;
75 u32 bi_blocks;
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 u32 rd_extfail_pt; /* extent failure point */
97 #define GFS2_RDF_CHECK 0x10000000 /* check for unlinked inodes */
98 #define GFS2_RDF_UPTODATE 0x20000000 /* rg is up to date */
99 #define GFS2_RDF_ERROR 0x40000000 /* error in rg */
100 #define GFS2_RDF_PREFERRED 0x80000000 /* This rgrp is preferred */
101 #define GFS2_RDF_MASK 0xf0000000 /* mask for internal flags */
102 spinlock_t rd_rsspin; /* protects reservation related vars */
103 struct rb_root rd_rstree; /* multi-block reservation tree */
106 struct gfs2_rbm {
107 struct gfs2_rgrpd *rgd;
108 u32 offset; /* The offset is bitmap relative */
109 int bii; /* Bitmap index */
112 static inline struct gfs2_bitmap *rbm_bi(const struct gfs2_rbm *rbm)
114 return rbm->rgd->rd_bits + rbm->bii;
117 static inline u64 gfs2_rbm_to_block(const struct gfs2_rbm *rbm)
119 return rbm->rgd->rd_data0 + (rbm_bi(rbm)->bi_start * GFS2_NBBY) +
120 rbm->offset;
123 static inline bool gfs2_rbm_eq(const struct gfs2_rbm *rbm1,
124 const struct gfs2_rbm *rbm2)
126 return (rbm1->rgd == rbm2->rgd) && (rbm1->bii == rbm2->bii) &&
127 (rbm1->offset == rbm2->offset);
130 enum gfs2_state_bits {
131 BH_Pinned = BH_PrivateStart,
132 BH_Escaped = BH_PrivateStart + 1,
133 BH_Zeronew = BH_PrivateStart + 2,
136 BUFFER_FNS(Pinned, pinned)
137 TAS_BUFFER_FNS(Pinned, pinned)
138 BUFFER_FNS(Escaped, escaped)
139 TAS_BUFFER_FNS(Escaped, escaped)
140 BUFFER_FNS(Zeronew, zeronew)
141 TAS_BUFFER_FNS(Zeronew, zeronew)
143 struct gfs2_bufdata {
144 struct buffer_head *bd_bh;
145 struct gfs2_glock *bd_gl;
146 u64 bd_blkno;
148 struct list_head bd_list;
149 const struct gfs2_log_operations *bd_ops;
151 struct gfs2_trans *bd_tr;
152 struct list_head bd_ail_st_list;
153 struct list_head bd_ail_gl_list;
157 * Internally, we prefix things with gdlm_ and GDLM_ (for gfs-dlm) since a
158 * prefix of lock_dlm_ gets awkward.
161 #define GDLM_STRNAME_BYTES 25
162 #define GDLM_LVB_SIZE 32
165 * ls_recover_flags:
167 * DFL_BLOCK_LOCKS: dlm is in recovery and will grant locks that had been
168 * held by failed nodes whose journals need recovery. Those locks should
169 * only be used for journal recovery until the journal recovery is done.
170 * This is set by the dlm recover_prep callback and cleared by the
171 * gfs2_control thread when journal recovery is complete. To avoid
172 * races between recover_prep setting and gfs2_control clearing, recover_spin
173 * is held while changing this bit and reading/writing recover_block
174 * and recover_start.
176 * DFL_NO_DLM_OPS: dlm lockspace ops/callbacks are not being used.
178 * DFL_FIRST_MOUNT: this node is the first to mount this fs and is doing
179 * recovery of all journals before allowing other nodes to mount the fs.
180 * This is cleared when FIRST_MOUNT_DONE is set.
182 * DFL_FIRST_MOUNT_DONE: this node was the first mounter, and has finished
183 * recovery of all journals, and now allows other nodes to mount the fs.
185 * DFL_MOUNT_DONE: gdlm_mount has completed successfully and cleared
186 * BLOCK_LOCKS for the first time. The gfs2_control thread should now
187 * control clearing BLOCK_LOCKS for further recoveries.
189 * DFL_UNMOUNT: gdlm_unmount sets to keep sdp off gfs2_control_wq.
191 * DFL_DLM_RECOVERY: set while dlm is in recovery, between recover_prep()
192 * and recover_done(), i.e. set while recover_block == recover_start.
195 enum {
196 DFL_BLOCK_LOCKS = 0,
197 DFL_NO_DLM_OPS = 1,
198 DFL_FIRST_MOUNT = 2,
199 DFL_FIRST_MOUNT_DONE = 3,
200 DFL_MOUNT_DONE = 4,
201 DFL_UNMOUNT = 5,
202 DFL_DLM_RECOVERY = 6,
206 * We are using struct lm_lockname as an rhashtable key. Avoid holes within
207 * the struct; padding at the end is fine.
209 struct lm_lockname {
210 u64 ln_number;
211 struct gfs2_sbd *ln_sbd;
212 unsigned int ln_type;
215 #define lm_name_equal(name1, name2) \
216 (((name1)->ln_number == (name2)->ln_number) && \
217 ((name1)->ln_type == (name2)->ln_type) && \
218 ((name1)->ln_sbd == (name2)->ln_sbd))
221 struct gfs2_glock_operations {
222 void (*go_sync) (struct gfs2_glock *gl);
223 int (*go_xmote_bh) (struct gfs2_glock *gl, struct gfs2_holder *gh);
224 void (*go_inval) (struct gfs2_glock *gl, int flags);
225 int (*go_demote_ok) (const struct gfs2_glock *gl);
226 int (*go_lock) (struct gfs2_holder *gh);
227 void (*go_unlock) (struct gfs2_holder *gh);
228 void (*go_dump)(struct seq_file *seq, const struct gfs2_glock *gl);
229 void (*go_callback)(struct gfs2_glock *gl, bool remote);
230 const int go_type;
231 const unsigned long go_flags;
232 #define GLOF_ASPACE 1
233 #define GLOF_LVB 2
234 #define GLOF_LRU 4
237 enum {
238 GFS2_LKS_SRTT = 0, /* Non blocking smoothed round trip time */
239 GFS2_LKS_SRTTVAR = 1, /* Non blocking smoothed variance */
240 GFS2_LKS_SRTTB = 2, /* Blocking smoothed round trip time */
241 GFS2_LKS_SRTTVARB = 3, /* Blocking smoothed variance */
242 GFS2_LKS_SIRT = 4, /* Smoothed Inter-request time */
243 GFS2_LKS_SIRTVAR = 5, /* Smoothed Inter-request variance */
244 GFS2_LKS_DCOUNT = 6, /* Count of dlm requests */
245 GFS2_LKS_QCOUNT = 7, /* Count of gfs2_holder queues */
246 GFS2_NR_LKSTATS
249 struct gfs2_lkstats {
250 u64 stats[GFS2_NR_LKSTATS];
253 enum {
254 /* States */
255 HIF_HOLDER = 6, /* Set for gh that "holds" the glock */
256 HIF_FIRST = 7,
257 HIF_WAIT = 10,
260 struct gfs2_holder {
261 struct list_head gh_list;
263 struct gfs2_glock *gh_gl;
264 struct pid *gh_owner_pid;
265 u16 gh_flags;
266 u16 gh_state;
268 int gh_error;
269 unsigned long gh_iflags; /* HIF_... */
270 unsigned long gh_ip;
273 /* Number of quota types we support */
274 #define GFS2_MAXQUOTAS 2
276 struct gfs2_qadata { /* quota allocation data */
277 /* Quota stuff */
278 struct gfs2_quota_data *qa_qd[2 * GFS2_MAXQUOTAS];
279 struct gfs2_holder qa_qd_ghs[2 * GFS2_MAXQUOTAS];
280 unsigned int qa_qd_num;
283 /* Resource group multi-block reservation, in order of appearance:
285 Step 1. Function prepares to write, allocates a mb, sets the size hint.
286 Step 2. User calls inplace_reserve to target an rgrp, sets the rgrp info
287 Step 3. Function get_local_rgrp locks the rgrp, determines which bits to use
288 Step 4. Bits are assigned from the rgrp based on either the reservation
289 or wherever it can.
292 struct gfs2_blkreserv {
293 /* components used during write (step 1): */
294 atomic_t rs_sizehint; /* hint of the write size */
296 struct gfs2_holder rs_rgd_gh; /* Filled in by get_local_rgrp */
297 struct rb_node rs_node; /* link to other block reservations */
298 struct gfs2_rbm rs_rbm; /* Start of reservation */
299 u32 rs_free; /* how many blocks are still free */
300 u64 rs_inum; /* Inode number for reservation */
304 * Allocation parameters
305 * @target: The number of blocks we'd ideally like to allocate
306 * @aflags: The flags (e.g. Orlov flag)
308 * The intent is to gradually expand this structure over time in
309 * order to give more information, e.g. alignment, min extent size
310 * to the allocation code.
312 struct gfs2_alloc_parms {
313 u64 target;
314 u32 min_target;
315 u32 aflags;
316 u64 allowed;
319 enum {
320 GLF_LOCK = 1,
321 GLF_DEMOTE = 3,
322 GLF_PENDING_DEMOTE = 4,
323 GLF_DEMOTE_IN_PROGRESS = 5,
324 GLF_DIRTY = 6,
325 GLF_LFLUSH = 7,
326 GLF_INVALIDATE_IN_PROGRESS = 8,
327 GLF_REPLY_PENDING = 9,
328 GLF_INITIAL = 10,
329 GLF_FROZEN = 11,
330 GLF_QUEUED = 12,
331 GLF_LRU = 13,
332 GLF_OBJECT = 14, /* Used only for tracing */
333 GLF_BLOCKING = 15,
334 GLF_INODE_CREATING = 16, /* Inode creation occurring */
337 struct gfs2_glock {
338 unsigned long gl_flags; /* GLF_... */
339 struct lm_lockname gl_name;
341 struct lockref gl_lockref;
343 /* State fields protected by gl_lockref.lock */
344 unsigned int gl_state:2, /* Current state */
345 gl_target:2, /* Target state */
346 gl_demote_state:2, /* State requested by remote node */
347 gl_req:2, /* State in last dlm request */
348 gl_reply:8; /* Last reply from the dlm */
350 unsigned long gl_demote_time; /* time of first demote request */
351 long gl_hold_time;
352 struct list_head gl_holders;
354 const struct gfs2_glock_operations *gl_ops;
355 ktime_t gl_dstamp;
356 struct gfs2_lkstats gl_stats;
357 struct dlm_lksb gl_lksb;
358 unsigned long gl_tchange;
359 void *gl_object;
361 struct list_head gl_lru;
362 struct list_head gl_ail_list;
363 atomic_t gl_ail_count;
364 atomic_t gl_revokes;
365 struct delayed_work gl_work;
366 union {
367 /* For inode and iopen glocks only */
368 struct work_struct gl_delete;
369 /* For rgrp glocks only */
370 struct {
371 loff_t start;
372 loff_t end;
373 } gl_vm;
375 struct rcu_head gl_rcu;
376 struct rhash_head gl_node;
379 #define GFS2_MIN_LVB_SIZE 32 /* Min size of LVB that gfs2 supports */
381 enum {
382 GIF_INVALID = 0,
383 GIF_QD_LOCKED = 1,
384 GIF_ALLOC_FAILED = 2,
385 GIF_SW_PAGED = 3,
386 GIF_ORDERED = 4,
387 GIF_FREE_VFS_INODE = 5,
388 GIF_GLOP_PENDING = 6,
391 struct gfs2_inode {
392 struct inode i_inode;
393 u64 i_no_addr;
394 u64 i_no_formal_ino;
395 u64 i_generation;
396 u64 i_eattr;
397 unsigned long i_flags; /* GIF_... */
398 struct gfs2_glock *i_gl; /* Move into i_gh? */
399 struct gfs2_holder i_iopen_gh;
400 struct gfs2_holder i_gh; /* for prepare/commit_write only */
401 struct gfs2_qadata *i_qadata; /* quota allocation data */
402 struct gfs2_blkreserv i_res; /* rgrp multi-block reservation */
403 struct gfs2_rgrpd *i_rgd;
404 u64 i_goal; /* goal block for allocations */
405 struct rw_semaphore i_rw_mutex;
406 struct list_head i_ordered;
407 struct list_head i_trunc_list;
408 __be64 *i_hash_cache;
409 u32 i_entries;
410 u32 i_diskflags;
411 u8 i_height;
412 u8 i_depth;
413 u16 i_rahead;
417 * Since i_inode is the first element of struct gfs2_inode,
418 * this is effectively a cast.
420 static inline struct gfs2_inode *GFS2_I(struct inode *inode)
422 return container_of(inode, struct gfs2_inode, i_inode);
425 static inline struct gfs2_sbd *GFS2_SB(const struct inode *inode)
427 return inode->i_sb->s_fs_info;
430 struct gfs2_file {
431 struct mutex f_fl_mutex;
432 struct gfs2_holder f_fl_gh;
435 struct gfs2_revoke_replay {
436 struct list_head rr_list;
437 u64 rr_blkno;
438 unsigned int rr_where;
441 enum {
442 QDF_CHANGE = 1,
443 QDF_LOCKED = 2,
444 QDF_REFRESH = 3,
445 QDF_QMSG_QUIET = 4,
448 struct gfs2_quota_data {
449 struct hlist_bl_node qd_hlist;
450 struct list_head qd_list;
451 struct kqid qd_id;
452 struct gfs2_sbd *qd_sbd;
453 struct lockref qd_lockref;
454 struct list_head qd_lru;
455 unsigned qd_hash;
457 unsigned long qd_flags; /* QDF_... */
459 s64 qd_change;
460 s64 qd_change_sync;
462 unsigned int qd_slot;
463 unsigned int qd_slot_count;
465 struct buffer_head *qd_bh;
466 struct gfs2_quota_change *qd_bh_qc;
467 unsigned int qd_bh_count;
469 struct gfs2_glock *qd_gl;
470 struct gfs2_quota_lvb qd_qb;
472 u64 qd_sync_gen;
473 unsigned long qd_last_warn;
474 struct rcu_head qd_rcu;
477 enum {
478 TR_TOUCHED = 1,
479 TR_ATTACHED = 2,
480 TR_ALLOCED = 3,
483 struct gfs2_trans {
484 unsigned long tr_ip;
486 unsigned int tr_blocks;
487 unsigned int tr_revokes;
488 unsigned int tr_reserved;
489 unsigned long tr_flags;
491 unsigned int tr_num_buf_new;
492 unsigned int tr_num_databuf_new;
493 unsigned int tr_num_buf_rm;
494 unsigned int tr_num_databuf_rm;
495 unsigned int tr_num_revoke;
496 unsigned int tr_num_revoke_rm;
498 struct list_head tr_list;
499 struct list_head tr_databuf;
500 struct list_head tr_buf;
502 unsigned int tr_first;
503 struct list_head tr_ail1_list;
504 struct list_head tr_ail2_list;
507 struct gfs2_journal_extent {
508 struct list_head list;
510 unsigned int lblock; /* First logical block */
511 u64 dblock; /* First disk block */
512 u64 blocks;
515 struct gfs2_jdesc {
516 struct list_head jd_list;
517 struct list_head extent_list;
518 unsigned int nr_extents;
519 struct work_struct jd_work;
520 struct inode *jd_inode;
521 unsigned long jd_flags;
522 #define JDF_RECOVERY 1
523 unsigned int jd_jid;
524 unsigned int jd_blocks;
525 int jd_recover_error;
526 /* Replay stuff */
528 unsigned int jd_found_blocks;
529 unsigned int jd_found_revokes;
530 unsigned int jd_replayed_blocks;
532 struct list_head jd_revoke_list;
533 unsigned int jd_replay_tail;
537 struct gfs2_statfs_change_host {
538 s64 sc_total;
539 s64 sc_free;
540 s64 sc_dinodes;
543 #define GFS2_QUOTA_DEFAULT GFS2_QUOTA_OFF
544 #define GFS2_QUOTA_OFF 0
545 #define GFS2_QUOTA_ACCOUNT 1
546 #define GFS2_QUOTA_ON 2
548 #define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED
549 #define GFS2_DATA_WRITEBACK 1
550 #define GFS2_DATA_ORDERED 2
552 #define GFS2_ERRORS_DEFAULT GFS2_ERRORS_WITHDRAW
553 #define GFS2_ERRORS_WITHDRAW 0
554 #define GFS2_ERRORS_CONTINUE 1 /* place holder for future feature */
555 #define GFS2_ERRORS_RO 2 /* place holder for future feature */
556 #define GFS2_ERRORS_PANIC 3
558 struct gfs2_args {
559 char ar_lockproto[GFS2_LOCKNAME_LEN]; /* Name of the Lock Protocol */
560 char ar_locktable[GFS2_LOCKNAME_LEN]; /* Name of the Lock Table */
561 char ar_hostdata[GFS2_LOCKNAME_LEN]; /* Host specific data */
562 unsigned int ar_spectator:1; /* Don't get a journal */
563 unsigned int ar_localflocks:1; /* Let the VFS do flock|fcntl */
564 unsigned int ar_debug:1; /* Oops on errors */
565 unsigned int ar_posix_acl:1; /* Enable posix acls */
566 unsigned int ar_quota:2; /* off/account/on */
567 unsigned int ar_suiddir:1; /* suiddir support */
568 unsigned int ar_data:2; /* ordered/writeback */
569 unsigned int ar_meta:1; /* mount metafs */
570 unsigned int ar_discard:1; /* discard requests */
571 unsigned int ar_errors:2; /* errors=withdraw | panic */
572 unsigned int ar_nobarrier:1; /* do not send barriers */
573 unsigned int ar_rgrplvb:1; /* use lvbs for rgrp info */
574 unsigned int ar_loccookie:1; /* use location based readdir
575 cookies */
576 int ar_commit; /* Commit interval */
577 int ar_statfs_quantum; /* The fast statfs interval */
578 int ar_quota_quantum; /* The quota interval */
579 int ar_statfs_percent; /* The % change to force sync */
582 struct gfs2_tune {
583 spinlock_t gt_spin;
585 unsigned int gt_logd_secs;
587 unsigned int gt_quota_warn_period; /* Secs between quota warn msgs */
588 unsigned int gt_quota_scale_num; /* Numerator */
589 unsigned int gt_quota_scale_den; /* Denominator */
590 unsigned int gt_quota_quantum; /* Secs between syncs to quota file */
591 unsigned int gt_new_files_jdata;
592 unsigned int gt_max_readahead; /* Max bytes to read-ahead from disk */
593 unsigned int gt_complain_secs;
594 unsigned int gt_statfs_quantum;
595 unsigned int gt_statfs_slow;
598 enum {
599 SDF_JOURNAL_CHECKED = 0,
600 SDF_JOURNAL_LIVE = 1,
601 SDF_SHUTDOWN = 2,
602 SDF_NOBARRIERS = 3,
603 SDF_NORECOVERY = 4,
604 SDF_DEMOTE = 5,
605 SDF_NOJOURNALID = 6,
606 SDF_RORECOVERY = 7, /* read only recovery */
607 SDF_SKIP_DLM_UNLOCK = 8,
608 SDF_FORCE_AIL_FLUSH = 9,
611 enum gfs2_freeze_state {
612 SFS_UNFROZEN = 0,
613 SFS_STARTING_FREEZE = 1,
614 SFS_FROZEN = 2,
617 #define GFS2_FSNAME_LEN 256
619 struct gfs2_inum_host {
620 u64 no_formal_ino;
621 u64 no_addr;
624 struct gfs2_sb_host {
625 u32 sb_magic;
626 u32 sb_type;
627 u32 sb_format;
629 u32 sb_fs_format;
630 u32 sb_multihost_format;
631 u32 sb_bsize;
632 u32 sb_bsize_shift;
634 struct gfs2_inum_host sb_master_dir;
635 struct gfs2_inum_host sb_root_dir;
637 char sb_lockproto[GFS2_LOCKNAME_LEN];
638 char sb_locktable[GFS2_LOCKNAME_LEN];
642 * lm_mount() return values
644 * ls_jid - the journal ID this node should use
645 * ls_first - this node is the first to mount the file system
646 * ls_lockspace - lock module's context for this file system
647 * ls_ops - lock module's functions
650 struct lm_lockstruct {
651 int ls_jid;
652 unsigned int ls_first;
653 const struct lm_lockops *ls_ops;
654 dlm_lockspace_t *ls_dlm;
656 int ls_recover_jid_done; /* These two are deprecated, */
657 int ls_recover_jid_status; /* used previously by gfs_controld */
659 struct dlm_lksb ls_mounted_lksb; /* mounted_lock */
660 struct dlm_lksb ls_control_lksb; /* control_lock */
661 char ls_control_lvb[GDLM_LVB_SIZE]; /* control_lock lvb */
662 struct completion ls_sync_wait; /* {control,mounted}_{lock,unlock} */
663 char *ls_lvb_bits;
665 spinlock_t ls_recover_spin; /* protects following fields */
666 unsigned long ls_recover_flags; /* DFL_ */
667 uint32_t ls_recover_mount; /* gen in first recover_done cb */
668 uint32_t ls_recover_start; /* gen in last recover_done cb */
669 uint32_t ls_recover_block; /* copy recover_start in last recover_prep */
670 uint32_t ls_recover_size; /* size of recover_submit, recover_result */
671 uint32_t *ls_recover_submit; /* gen in last recover_slot cb per jid */
672 uint32_t *ls_recover_result; /* result of last jid recovery */
675 struct gfs2_pcpu_lkstats {
676 /* One struct for each glock type */
677 struct gfs2_lkstats lkstats[10];
680 struct gfs2_sbd {
681 struct super_block *sd_vfs;
682 struct gfs2_pcpu_lkstats __percpu *sd_lkstats;
683 struct kobject sd_kobj;
684 unsigned long sd_flags; /* SDF_... */
685 struct gfs2_sb_host sd_sb;
687 /* Constants computed on mount */
689 u32 sd_fsb2bb;
690 u32 sd_fsb2bb_shift;
691 u32 sd_diptrs; /* Number of pointers in a dinode */
692 u32 sd_inptrs; /* Number of pointers in a indirect block */
693 u32 sd_jbsize; /* Size of a journaled data block */
694 u32 sd_hash_bsize; /* sizeof(exhash block) */
695 u32 sd_hash_bsize_shift;
696 u32 sd_hash_ptrs; /* Number of pointers in a hash block */
697 u32 sd_qc_per_block;
698 u32 sd_blocks_per_bitmap;
699 u32 sd_max_dirres; /* Max blocks needed to add a directory entry */
700 u32 sd_max_height; /* Max height of a file's metadata tree */
701 u64 sd_heightsize[GFS2_MAX_META_HEIGHT + 1];
702 u32 sd_max_jheight; /* Max height of journaled file's meta tree */
703 u64 sd_jheightsize[GFS2_MAX_META_HEIGHT + 1];
704 u32 sd_max_dents_per_leaf; /* Max number of dirents in a leaf block */
706 struct gfs2_args sd_args; /* Mount arguments */
707 struct gfs2_tune sd_tune; /* Filesystem tuning structure */
709 /* Lock Stuff */
711 struct lm_lockstruct sd_lockstruct;
712 struct gfs2_holder sd_live_gh;
713 struct gfs2_glock *sd_rename_gl;
714 struct gfs2_glock *sd_freeze_gl;
715 struct work_struct sd_freeze_work;
716 wait_queue_head_t sd_glock_wait;
717 atomic_t sd_glock_disposal;
718 struct completion sd_locking_init;
719 struct completion sd_wdack;
720 struct delayed_work sd_control_work;
722 /* Inode Stuff */
724 struct dentry *sd_master_dir;
725 struct dentry *sd_root_dir;
727 struct inode *sd_jindex;
728 struct inode *sd_statfs_inode;
729 struct inode *sd_sc_inode;
730 struct inode *sd_qc_inode;
731 struct inode *sd_rindex;
732 struct inode *sd_quota_inode;
734 /* StatFS stuff */
736 spinlock_t sd_statfs_spin;
737 struct gfs2_statfs_change_host sd_statfs_master;
738 struct gfs2_statfs_change_host sd_statfs_local;
739 int sd_statfs_force_sync;
741 /* Resource group stuff */
743 int sd_rindex_uptodate;
744 spinlock_t sd_rindex_spin;
745 struct rb_root sd_rindex_tree;
746 unsigned int sd_rgrps;
747 unsigned int sd_max_rg_data;
749 /* Journal index stuff */
751 struct list_head sd_jindex_list;
752 spinlock_t sd_jindex_spin;
753 struct mutex sd_jindex_mutex;
754 unsigned int sd_journals;
756 struct gfs2_jdesc *sd_jdesc;
757 struct gfs2_holder sd_journal_gh;
758 struct gfs2_holder sd_jinode_gh;
760 struct gfs2_holder sd_sc_gh;
761 struct gfs2_holder sd_qc_gh;
763 struct completion sd_journal_ready;
765 /* Daemon stuff */
767 struct task_struct *sd_logd_process;
768 struct task_struct *sd_quotad_process;
770 /* Quota stuff */
772 struct list_head sd_quota_list;
773 atomic_t sd_quota_count;
774 struct mutex sd_quota_mutex;
775 struct mutex sd_quota_sync_mutex;
776 wait_queue_head_t sd_quota_wait;
777 struct list_head sd_trunc_list;
778 spinlock_t sd_trunc_lock;
780 unsigned int sd_quota_slots;
781 unsigned long *sd_quota_bitmap;
782 spinlock_t sd_bitmap_lock;
784 u64 sd_quota_sync_gen;
786 /* Log stuff */
788 struct address_space sd_aspace;
790 spinlock_t sd_log_lock;
792 struct gfs2_trans *sd_log_tr;
793 unsigned int sd_log_blks_reserved;
794 int sd_log_commited_revoke;
796 atomic_t sd_log_pinned;
797 unsigned int sd_log_num_revoke;
799 struct list_head sd_log_le_revoke;
800 struct list_head sd_log_le_ordered;
801 spinlock_t sd_ordered_lock;
803 atomic_t sd_log_thresh1;
804 atomic_t sd_log_thresh2;
805 atomic_t sd_log_blks_free;
806 atomic_t sd_log_blks_needed;
807 wait_queue_head_t sd_log_waitq;
808 wait_queue_head_t sd_logd_waitq;
810 u64 sd_log_sequence;
811 unsigned int sd_log_head;
812 unsigned int sd_log_tail;
813 int sd_log_idle;
815 struct rw_semaphore sd_log_flush_lock;
816 atomic_t sd_log_in_flight;
817 struct bio *sd_log_bio;
818 wait_queue_head_t sd_log_flush_wait;
819 int sd_log_error;
821 atomic_t sd_reserving_log;
822 wait_queue_head_t sd_reserving_log_wait;
824 unsigned int sd_log_flush_head;
826 spinlock_t sd_ail_lock;
827 struct list_head sd_ail1_list;
828 struct list_head sd_ail2_list;
830 /* For quiescing the filesystem */
831 struct gfs2_holder sd_freeze_gh;
832 atomic_t sd_freeze_state;
833 struct mutex sd_freeze_mutex;
835 char sd_fsname[GFS2_FSNAME_LEN + 3 * sizeof(int) + 2];
836 char sd_table_name[GFS2_FSNAME_LEN];
837 char sd_proto_name[GFS2_FSNAME_LEN];
839 /* Debugging crud */
841 unsigned long sd_last_warning;
842 struct dentry *debugfs_dir; /* debugfs directory */
843 struct dentry *debugfs_dentry_glocks;
844 struct dentry *debugfs_dentry_glstats;
845 struct dentry *debugfs_dentry_sbstats;
848 static inline void gfs2_glstats_inc(struct gfs2_glock *gl, int which)
850 gl->gl_stats.stats[which]++;
853 static inline void gfs2_sbstats_inc(const struct gfs2_glock *gl, int which)
855 const struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
856 preempt_disable();
857 this_cpu_ptr(sdp->sd_lkstats)->lkstats[gl->gl_name.ln_type].stats[which]++;
858 preempt_enable();
861 extern struct gfs2_rgrpd *gfs2_glock2rgrp(struct gfs2_glock *gl);
863 static inline unsigned gfs2_max_stuffed_size(const struct gfs2_inode *ip)
865 return GFS2_SB(&ip->i_inode)->sd_sb.sb_bsize - sizeof(struct gfs2_dinode);
868 #endif /* __INCORE_DOT_H__ */