drm/panfrost: Remove set but not used variable 'bo'
[linux/fpc-iii.git] / fs / gfs2 / incore.h
blob9fd88ed188073a9194f960fde6cb772eee8dbc58
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
4 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
5 */
7 #ifndef __INCORE_DOT_H__
8 #define __INCORE_DOT_H__
10 #include <linux/fs.h>
11 #include <linux/kobject.h>
12 #include <linux/workqueue.h>
13 #include <linux/dlm.h>
14 #include <linux/buffer_head.h>
15 #include <linux/rcupdate.h>
16 #include <linux/rculist_bl.h>
17 #include <linux/completion.h>
18 #include <linux/rbtree.h>
19 #include <linux/ktime.h>
20 #include <linux/percpu.h>
21 #include <linux/lockref.h>
22 #include <linux/rhashtable.h>
24 #define DIO_WAIT 0x00000010
25 #define DIO_METADATA 0x00000020
27 struct gfs2_log_operations;
28 struct gfs2_bufdata;
29 struct gfs2_holder;
30 struct gfs2_glock;
31 struct gfs2_quota_data;
32 struct gfs2_trans;
33 struct gfs2_jdesc;
34 struct gfs2_sbd;
35 struct lm_lockops;
37 typedef void (*gfs2_glop_bh_t) (struct gfs2_glock *gl, unsigned int ret);
39 struct gfs2_log_header_host {
40 u64 lh_sequence; /* Sequence number of this transaction */
41 u32 lh_flags; /* GFS2_LOG_HEAD_... */
42 u32 lh_tail; /* Block number of log tail */
43 u32 lh_blkno;
47 * Structure of operations that are associated with each
48 * type of element in the log.
51 struct gfs2_log_operations {
52 void (*lo_before_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
53 void (*lo_after_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr);
54 void (*lo_before_scan) (struct gfs2_jdesc *jd,
55 struct gfs2_log_header_host *head, int pass);
56 int (*lo_scan_elements) (struct gfs2_jdesc *jd, unsigned int start,
57 struct gfs2_log_descriptor *ld, __be64 *ptr,
58 int pass);
59 void (*lo_after_scan) (struct gfs2_jdesc *jd, int error, int pass);
60 const char *lo_name;
63 #define GBF_FULL 1
65 /**
66 * Clone bitmaps (bi_clone):
68 * - When a block is freed, we remember the previous state of the block in the
69 * clone bitmap, and only mark the block as free in the real bitmap.
71 * - When looking for a block to allocate, we check for a free block in the
72 * clone bitmap, and if no clone bitmap exists, in the real bitmap.
74 * - For allocating a block, we mark it as allocated in the real bitmap, and if
75 * a clone bitmap exists, also in the clone bitmap.
77 * - At the end of a log_flush, we copy the real bitmap into the clone bitmap
78 * to make the clone bitmap reflect the current allocation state.
79 * (Alternatively, we could remove the clone bitmap.)
81 * The clone bitmaps are in-core only, and is never written to disk.
83 * These steps ensure that blocks which have been freed in a transaction cannot
84 * be reallocated in that same transaction.
86 struct gfs2_bitmap {
87 struct buffer_head *bi_bh;
88 char *bi_clone;
89 unsigned long bi_flags;
90 u32 bi_offset;
91 u32 bi_start;
92 u32 bi_bytes;
93 u32 bi_blocks;
96 struct gfs2_rgrpd {
97 struct rb_node rd_node; /* Link with superblock */
98 struct gfs2_glock *rd_gl; /* Glock for this rgrp */
99 u64 rd_addr; /* grp block disk address */
100 u64 rd_data0; /* first data location */
101 u32 rd_length; /* length of rgrp header in fs blocks */
102 u32 rd_data; /* num of data blocks in rgrp */
103 u32 rd_bitbytes; /* number of bytes in data bitmaps */
104 u32 rd_free;
105 u32 rd_reserved; /* number of blocks reserved */
106 u32 rd_free_clone;
107 u32 rd_dinodes;
108 u64 rd_igeneration;
109 struct gfs2_bitmap *rd_bits;
110 struct gfs2_sbd *rd_sbd;
111 struct gfs2_rgrp_lvb *rd_rgl;
112 u32 rd_last_alloc;
113 u32 rd_flags;
114 u32 rd_extfail_pt; /* extent failure point */
115 #define GFS2_RDF_CHECK 0x10000000 /* check for unlinked inodes */
116 #define GFS2_RDF_UPTODATE 0x20000000 /* rg is up to date */
117 #define GFS2_RDF_ERROR 0x40000000 /* error in rg */
118 #define GFS2_RDF_PREFERRED 0x80000000 /* This rgrp is preferred */
119 #define GFS2_RDF_MASK 0xf0000000 /* mask for internal flags */
120 spinlock_t rd_rsspin; /* protects reservation related vars */
121 struct rb_root rd_rstree; /* multi-block reservation tree */
124 struct gfs2_rbm {
125 struct gfs2_rgrpd *rgd;
126 u32 offset; /* The offset is bitmap relative */
127 int bii; /* Bitmap index */
130 static inline struct gfs2_bitmap *rbm_bi(const struct gfs2_rbm *rbm)
132 return rbm->rgd->rd_bits + rbm->bii;
135 static inline u64 gfs2_rbm_to_block(const struct gfs2_rbm *rbm)
137 BUG_ON(rbm->offset >= rbm->rgd->rd_data);
138 return rbm->rgd->rd_data0 + (rbm_bi(rbm)->bi_start * GFS2_NBBY) +
139 rbm->offset;
142 static inline bool gfs2_rbm_eq(const struct gfs2_rbm *rbm1,
143 const struct gfs2_rbm *rbm2)
145 return (rbm1->rgd == rbm2->rgd) && (rbm1->bii == rbm2->bii) &&
146 (rbm1->offset == rbm2->offset);
149 enum gfs2_state_bits {
150 BH_Pinned = BH_PrivateStart,
151 BH_Escaped = BH_PrivateStart + 1,
154 BUFFER_FNS(Pinned, pinned)
155 TAS_BUFFER_FNS(Pinned, pinned)
156 BUFFER_FNS(Escaped, escaped)
157 TAS_BUFFER_FNS(Escaped, escaped)
159 struct gfs2_bufdata {
160 struct buffer_head *bd_bh;
161 struct gfs2_glock *bd_gl;
162 u64 bd_blkno;
164 struct list_head bd_list;
166 struct gfs2_trans *bd_tr;
167 struct list_head bd_ail_st_list;
168 struct list_head bd_ail_gl_list;
172 * Internally, we prefix things with gdlm_ and GDLM_ (for gfs-dlm) since a
173 * prefix of lock_dlm_ gets awkward.
176 #define GDLM_STRNAME_BYTES 25
177 #define GDLM_LVB_SIZE 32
180 * ls_recover_flags:
182 * DFL_BLOCK_LOCKS: dlm is in recovery and will grant locks that had been
183 * held by failed nodes whose journals need recovery. Those locks should
184 * only be used for journal recovery until the journal recovery is done.
185 * This is set by the dlm recover_prep callback and cleared by the
186 * gfs2_control thread when journal recovery is complete. To avoid
187 * races between recover_prep setting and gfs2_control clearing, recover_spin
188 * is held while changing this bit and reading/writing recover_block
189 * and recover_start.
191 * DFL_NO_DLM_OPS: dlm lockspace ops/callbacks are not being used.
193 * DFL_FIRST_MOUNT: this node is the first to mount this fs and is doing
194 * recovery of all journals before allowing other nodes to mount the fs.
195 * This is cleared when FIRST_MOUNT_DONE is set.
197 * DFL_FIRST_MOUNT_DONE: this node was the first mounter, and has finished
198 * recovery of all journals, and now allows other nodes to mount the fs.
200 * DFL_MOUNT_DONE: gdlm_mount has completed successfully and cleared
201 * BLOCK_LOCKS for the first time. The gfs2_control thread should now
202 * control clearing BLOCK_LOCKS for further recoveries.
204 * DFL_UNMOUNT: gdlm_unmount sets to keep sdp off gfs2_control_wq.
206 * DFL_DLM_RECOVERY: set while dlm is in recovery, between recover_prep()
207 * and recover_done(), i.e. set while recover_block == recover_start.
210 enum {
211 DFL_BLOCK_LOCKS = 0,
212 DFL_NO_DLM_OPS = 1,
213 DFL_FIRST_MOUNT = 2,
214 DFL_FIRST_MOUNT_DONE = 3,
215 DFL_MOUNT_DONE = 4,
216 DFL_UNMOUNT = 5,
217 DFL_DLM_RECOVERY = 6,
221 * We are using struct lm_lockname as an rhashtable key. Avoid holes within
222 * the struct; padding at the end is fine.
224 struct lm_lockname {
225 u64 ln_number;
226 struct gfs2_sbd *ln_sbd;
227 unsigned int ln_type;
230 #define lm_name_equal(name1, name2) \
231 (((name1)->ln_number == (name2)->ln_number) && \
232 ((name1)->ln_type == (name2)->ln_type) && \
233 ((name1)->ln_sbd == (name2)->ln_sbd))
236 struct gfs2_glock_operations {
237 void (*go_sync) (struct gfs2_glock *gl);
238 int (*go_xmote_bh) (struct gfs2_glock *gl, struct gfs2_holder *gh);
239 void (*go_inval) (struct gfs2_glock *gl, int flags);
240 int (*go_demote_ok) (const struct gfs2_glock *gl);
241 int (*go_lock) (struct gfs2_holder *gh);
242 void (*go_unlock) (struct gfs2_holder *gh);
243 void (*go_dump)(struct seq_file *seq, struct gfs2_glock *gl,
244 const char *fs_id_buf);
245 void (*go_callback)(struct gfs2_glock *gl, bool remote);
246 const int go_type;
247 const unsigned long go_flags;
248 #define GLOF_ASPACE 1
249 #define GLOF_LVB 2
250 #define GLOF_LRU 4
253 enum {
254 GFS2_LKS_SRTT = 0, /* Non blocking smoothed round trip time */
255 GFS2_LKS_SRTTVAR = 1, /* Non blocking smoothed variance */
256 GFS2_LKS_SRTTB = 2, /* Blocking smoothed round trip time */
257 GFS2_LKS_SRTTVARB = 3, /* Blocking smoothed variance */
258 GFS2_LKS_SIRT = 4, /* Smoothed Inter-request time */
259 GFS2_LKS_SIRTVAR = 5, /* Smoothed Inter-request variance */
260 GFS2_LKS_DCOUNT = 6, /* Count of dlm requests */
261 GFS2_LKS_QCOUNT = 7, /* Count of gfs2_holder queues */
262 GFS2_NR_LKSTATS
265 struct gfs2_lkstats {
266 u64 stats[GFS2_NR_LKSTATS];
269 enum {
270 /* States */
271 HIF_HOLDER = 6, /* Set for gh that "holds" the glock */
272 HIF_FIRST = 7,
273 HIF_WAIT = 10,
276 struct gfs2_holder {
277 struct list_head gh_list;
279 struct gfs2_glock *gh_gl;
280 struct pid *gh_owner_pid;
281 u16 gh_flags;
282 u16 gh_state;
284 int gh_error;
285 unsigned long gh_iflags; /* HIF_... */
286 unsigned long gh_ip;
289 /* Number of quota types we support */
290 #define GFS2_MAXQUOTAS 2
292 struct gfs2_qadata { /* quota allocation data */
293 /* Quota stuff */
294 struct gfs2_quota_data *qa_qd[2 * GFS2_MAXQUOTAS];
295 struct gfs2_holder qa_qd_ghs[2 * GFS2_MAXQUOTAS];
296 unsigned int qa_qd_num;
299 /* Resource group multi-block reservation, in order of appearance:
301 Step 1. Function prepares to write, allocates a mb, sets the size hint.
302 Step 2. User calls inplace_reserve to target an rgrp, sets the rgrp info
303 Step 3. Function get_local_rgrp locks the rgrp, determines which bits to use
304 Step 4. Bits are assigned from the rgrp based on either the reservation
305 or wherever it can.
308 struct gfs2_blkreserv {
309 struct rb_node rs_node; /* link to other block reservations */
310 struct gfs2_rbm rs_rbm; /* Start of reservation */
311 u32 rs_free; /* how many blocks are still free */
315 * Allocation parameters
316 * @target: The number of blocks we'd ideally like to allocate
317 * @aflags: The flags (e.g. Orlov flag)
319 * The intent is to gradually expand this structure over time in
320 * order to give more information, e.g. alignment, min extent size
321 * to the allocation code.
323 struct gfs2_alloc_parms {
324 u64 target;
325 u32 min_target;
326 u32 aflags;
327 u64 allowed;
330 enum {
331 GLF_LOCK = 1,
332 GLF_DEMOTE = 3,
333 GLF_PENDING_DEMOTE = 4,
334 GLF_DEMOTE_IN_PROGRESS = 5,
335 GLF_DIRTY = 6,
336 GLF_LFLUSH = 7,
337 GLF_INVALIDATE_IN_PROGRESS = 8,
338 GLF_REPLY_PENDING = 9,
339 GLF_INITIAL = 10,
340 GLF_FROZEN = 11,
341 GLF_QUEUED = 12,
342 GLF_LRU = 13,
343 GLF_OBJECT = 14, /* Used only for tracing */
344 GLF_BLOCKING = 15,
345 GLF_INODE_CREATING = 16, /* Inode creation occurring */
348 struct gfs2_glock {
349 unsigned long gl_flags; /* GLF_... */
350 struct lm_lockname gl_name;
352 struct lockref gl_lockref;
354 /* State fields protected by gl_lockref.lock */
355 unsigned int gl_state:2, /* Current state */
356 gl_target:2, /* Target state */
357 gl_demote_state:2, /* State requested by remote node */
358 gl_req:2, /* State in last dlm request */
359 gl_reply:8; /* Last reply from the dlm */
361 unsigned long gl_demote_time; /* time of first demote request */
362 long gl_hold_time;
363 struct list_head gl_holders;
365 const struct gfs2_glock_operations *gl_ops;
366 ktime_t gl_dstamp;
367 struct gfs2_lkstats gl_stats;
368 struct dlm_lksb gl_lksb;
369 unsigned long gl_tchange;
370 void *gl_object;
372 struct list_head gl_lru;
373 struct list_head gl_ail_list;
374 atomic_t gl_ail_count;
375 atomic_t gl_revokes;
376 struct delayed_work gl_work;
377 union {
378 /* For inode and iopen glocks only */
379 struct work_struct gl_delete;
380 /* For rgrp glocks only */
381 struct {
382 loff_t start;
383 loff_t end;
384 } gl_vm;
386 struct rcu_head gl_rcu;
387 struct rhash_head gl_node;
390 enum {
391 GIF_INVALID = 0,
392 GIF_QD_LOCKED = 1,
393 GIF_ALLOC_FAILED = 2,
394 GIF_SW_PAGED = 3,
395 GIF_ORDERED = 4,
396 GIF_FREE_VFS_INODE = 5,
397 GIF_GLOP_PENDING = 6,
400 struct gfs2_inode {
401 struct inode i_inode;
402 u64 i_no_addr;
403 u64 i_no_formal_ino;
404 u64 i_generation;
405 u64 i_eattr;
406 unsigned long i_flags; /* GIF_... */
407 struct gfs2_glock *i_gl; /* Move into i_gh? */
408 struct gfs2_holder i_iopen_gh;
409 struct gfs2_holder i_gh; /* for prepare/commit_write only */
410 struct gfs2_qadata *i_qadata; /* quota allocation data */
411 struct gfs2_holder i_rgd_gh;
412 struct gfs2_blkreserv i_res; /* rgrp multi-block reservation */
413 u64 i_goal; /* goal block for allocations */
414 atomic_t i_sizehint; /* hint of the write size */
415 struct rw_semaphore i_rw_mutex;
416 struct list_head i_ordered;
417 struct list_head i_trunc_list;
418 __be64 *i_hash_cache;
419 u32 i_entries;
420 u32 i_diskflags;
421 u8 i_height;
422 u8 i_depth;
423 u16 i_rahead;
427 * Since i_inode is the first element of struct gfs2_inode,
428 * this is effectively a cast.
430 static inline struct gfs2_inode *GFS2_I(struct inode *inode)
432 return container_of(inode, struct gfs2_inode, i_inode);
435 static inline struct gfs2_sbd *GFS2_SB(const struct inode *inode)
437 return inode->i_sb->s_fs_info;
440 struct gfs2_file {
441 struct mutex f_fl_mutex;
442 struct gfs2_holder f_fl_gh;
445 struct gfs2_revoke_replay {
446 struct list_head rr_list;
447 u64 rr_blkno;
448 unsigned int rr_where;
451 enum {
452 QDF_CHANGE = 1,
453 QDF_LOCKED = 2,
454 QDF_REFRESH = 3,
455 QDF_QMSG_QUIET = 4,
458 struct gfs2_quota_data {
459 struct hlist_bl_node qd_hlist;
460 struct list_head qd_list;
461 struct kqid qd_id;
462 struct gfs2_sbd *qd_sbd;
463 struct lockref qd_lockref;
464 struct list_head qd_lru;
465 unsigned qd_hash;
467 unsigned long qd_flags; /* QDF_... */
469 s64 qd_change;
470 s64 qd_change_sync;
472 unsigned int qd_slot;
473 unsigned int qd_slot_count;
475 struct buffer_head *qd_bh;
476 struct gfs2_quota_change *qd_bh_qc;
477 unsigned int qd_bh_count;
479 struct gfs2_glock *qd_gl;
480 struct gfs2_quota_lvb qd_qb;
482 u64 qd_sync_gen;
483 unsigned long qd_last_warn;
484 struct rcu_head qd_rcu;
487 enum {
488 TR_TOUCHED = 1,
489 TR_ATTACHED = 2,
490 TR_ALLOCED = 3,
493 struct gfs2_trans {
494 unsigned long tr_ip;
496 unsigned int tr_blocks;
497 unsigned int tr_revokes;
498 unsigned int tr_reserved;
499 unsigned long tr_flags;
501 unsigned int tr_num_buf_new;
502 unsigned int tr_num_databuf_new;
503 unsigned int tr_num_buf_rm;
504 unsigned int tr_num_databuf_rm;
505 unsigned int tr_num_revoke;
506 unsigned int tr_num_revoke_rm;
508 struct list_head tr_list;
509 struct list_head tr_databuf;
510 struct list_head tr_buf;
512 unsigned int tr_first;
513 struct list_head tr_ail1_list;
514 struct list_head tr_ail2_list;
517 struct gfs2_journal_extent {
518 struct list_head list;
520 unsigned int lblock; /* First logical block */
521 u64 dblock; /* First disk block */
522 u64 blocks;
525 struct gfs2_jdesc {
526 struct list_head jd_list;
527 struct list_head extent_list;
528 unsigned int nr_extents;
529 struct work_struct jd_work;
530 struct inode *jd_inode;
531 unsigned long jd_flags;
532 #define JDF_RECOVERY 1
533 unsigned int jd_jid;
534 u32 jd_blocks;
535 int jd_recover_error;
536 /* Replay stuff */
538 unsigned int jd_found_blocks;
539 unsigned int jd_found_revokes;
540 unsigned int jd_replayed_blocks;
542 struct list_head jd_revoke_list;
543 unsigned int jd_replay_tail;
547 struct gfs2_statfs_change_host {
548 s64 sc_total;
549 s64 sc_free;
550 s64 sc_dinodes;
553 #define GFS2_QUOTA_DEFAULT GFS2_QUOTA_OFF
554 #define GFS2_QUOTA_OFF 0
555 #define GFS2_QUOTA_ACCOUNT 1
556 #define GFS2_QUOTA_ON 2
558 #define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED
559 #define GFS2_DATA_WRITEBACK 1
560 #define GFS2_DATA_ORDERED 2
562 #define GFS2_ERRORS_DEFAULT GFS2_ERRORS_WITHDRAW
563 #define GFS2_ERRORS_WITHDRAW 0
564 #define GFS2_ERRORS_CONTINUE 1 /* place holder for future feature */
565 #define GFS2_ERRORS_RO 2 /* place holder for future feature */
566 #define GFS2_ERRORS_PANIC 3
568 struct gfs2_args {
569 char ar_lockproto[GFS2_LOCKNAME_LEN]; /* Name of the Lock Protocol */
570 char ar_locktable[GFS2_LOCKNAME_LEN]; /* Name of the Lock Table */
571 char ar_hostdata[GFS2_LOCKNAME_LEN]; /* Host specific data */
572 unsigned int ar_spectator:1; /* Don't get a journal */
573 unsigned int ar_localflocks:1; /* Let the VFS do flock|fcntl */
574 unsigned int ar_debug:1; /* Oops on errors */
575 unsigned int ar_posix_acl:1; /* Enable posix acls */
576 unsigned int ar_quota:2; /* off/account/on */
577 unsigned int ar_suiddir:1; /* suiddir support */
578 unsigned int ar_data:2; /* ordered/writeback */
579 unsigned int ar_meta:1; /* mount metafs */
580 unsigned int ar_discard:1; /* discard requests */
581 unsigned int ar_errors:2; /* errors=withdraw | panic */
582 unsigned int ar_nobarrier:1; /* do not send barriers */
583 unsigned int ar_rgrplvb:1; /* use lvbs for rgrp info */
584 unsigned int ar_loccookie:1; /* use location based readdir
585 cookies */
586 s32 ar_commit; /* Commit interval */
587 s32 ar_statfs_quantum; /* The fast statfs interval */
588 s32 ar_quota_quantum; /* The quota interval */
589 s32 ar_statfs_percent; /* The % change to force sync */
592 struct gfs2_tune {
593 spinlock_t gt_spin;
595 unsigned int gt_logd_secs;
597 unsigned int gt_quota_warn_period; /* Secs between quota warn msgs */
598 unsigned int gt_quota_scale_num; /* Numerator */
599 unsigned int gt_quota_scale_den; /* Denominator */
600 unsigned int gt_quota_quantum; /* Secs between syncs to quota file */
601 unsigned int gt_new_files_jdata;
602 unsigned int gt_max_readahead; /* Max bytes to read-ahead from disk */
603 unsigned int gt_complain_secs;
604 unsigned int gt_statfs_quantum;
605 unsigned int gt_statfs_slow;
608 enum {
609 SDF_JOURNAL_CHECKED = 0,
610 SDF_JOURNAL_LIVE = 1,
611 SDF_WITHDRAWN = 2,
612 SDF_NOBARRIERS = 3,
613 SDF_NORECOVERY = 4,
614 SDF_DEMOTE = 5,
615 SDF_NOJOURNALID = 6,
616 SDF_RORECOVERY = 7, /* read only recovery */
617 SDF_SKIP_DLM_UNLOCK = 8,
618 SDF_FORCE_AIL_FLUSH = 9,
619 SDF_AIL1_IO_ERROR = 10,
620 SDF_FS_FROZEN = 11,
623 enum gfs2_freeze_state {
624 SFS_UNFROZEN = 0,
625 SFS_STARTING_FREEZE = 1,
626 SFS_FROZEN = 2,
629 #define GFS2_FSNAME_LEN 256
631 struct gfs2_inum_host {
632 u64 no_formal_ino;
633 u64 no_addr;
636 struct gfs2_sb_host {
637 u32 sb_magic;
638 u32 sb_type;
639 u32 sb_format;
641 u32 sb_fs_format;
642 u32 sb_multihost_format;
643 u32 sb_bsize;
644 u32 sb_bsize_shift;
646 struct gfs2_inum_host sb_master_dir;
647 struct gfs2_inum_host sb_root_dir;
649 char sb_lockproto[GFS2_LOCKNAME_LEN];
650 char sb_locktable[GFS2_LOCKNAME_LEN];
654 * lm_mount() return values
656 * ls_jid - the journal ID this node should use
657 * ls_first - this node is the first to mount the file system
658 * ls_lockspace - lock module's context for this file system
659 * ls_ops - lock module's functions
662 struct lm_lockstruct {
663 int ls_jid;
664 unsigned int ls_first;
665 const struct lm_lockops *ls_ops;
666 dlm_lockspace_t *ls_dlm;
668 int ls_recover_jid_done; /* These two are deprecated, */
669 int ls_recover_jid_status; /* used previously by gfs_controld */
671 struct dlm_lksb ls_mounted_lksb; /* mounted_lock */
672 struct dlm_lksb ls_control_lksb; /* control_lock */
673 char ls_control_lvb[GDLM_LVB_SIZE]; /* control_lock lvb */
674 struct completion ls_sync_wait; /* {control,mounted}_{lock,unlock} */
675 char *ls_lvb_bits;
677 spinlock_t ls_recover_spin; /* protects following fields */
678 unsigned long ls_recover_flags; /* DFL_ */
679 uint32_t ls_recover_mount; /* gen in first recover_done cb */
680 uint32_t ls_recover_start; /* gen in last recover_done cb */
681 uint32_t ls_recover_block; /* copy recover_start in last recover_prep */
682 uint32_t ls_recover_size; /* size of recover_submit, recover_result */
683 uint32_t *ls_recover_submit; /* gen in last recover_slot cb per jid */
684 uint32_t *ls_recover_result; /* result of last jid recovery */
687 struct gfs2_pcpu_lkstats {
688 /* One struct for each glock type */
689 struct gfs2_lkstats lkstats[10];
692 struct gfs2_sbd {
693 struct super_block *sd_vfs;
694 struct gfs2_pcpu_lkstats __percpu *sd_lkstats;
695 struct kobject sd_kobj;
696 unsigned long sd_flags; /* SDF_... */
697 struct gfs2_sb_host sd_sb;
699 /* Constants computed on mount */
701 u32 sd_fsb2bb;
702 u32 sd_fsb2bb_shift;
703 u32 sd_diptrs; /* Number of pointers in a dinode */
704 u32 sd_inptrs; /* Number of pointers in a indirect block */
705 u32 sd_ldptrs; /* Number of pointers in a log descriptor block */
706 u32 sd_jbsize; /* Size of a journaled data block */
707 u32 sd_hash_bsize; /* sizeof(exhash block) */
708 u32 sd_hash_bsize_shift;
709 u32 sd_hash_ptrs; /* Number of pointers in a hash block */
710 u32 sd_qc_per_block;
711 u32 sd_blocks_per_bitmap;
712 u32 sd_max_dirres; /* Max blocks needed to add a directory entry */
713 u32 sd_max_height; /* Max height of a file's metadata tree */
714 u64 sd_heightsize[GFS2_MAX_META_HEIGHT + 1];
715 u32 sd_max_dents_per_leaf; /* Max number of dirents in a leaf block */
717 struct gfs2_args sd_args; /* Mount arguments */
718 struct gfs2_tune sd_tune; /* Filesystem tuning structure */
720 /* Lock Stuff */
722 struct lm_lockstruct sd_lockstruct;
723 struct gfs2_holder sd_live_gh;
724 struct gfs2_glock *sd_rename_gl;
725 struct gfs2_glock *sd_freeze_gl;
726 struct work_struct sd_freeze_work;
727 wait_queue_head_t sd_glock_wait;
728 wait_queue_head_t sd_async_glock_wait;
729 atomic_t sd_glock_disposal;
730 struct completion sd_locking_init;
731 struct completion sd_wdack;
732 struct delayed_work sd_control_work;
734 /* Inode Stuff */
736 struct dentry *sd_master_dir;
737 struct dentry *sd_root_dir;
739 struct inode *sd_jindex;
740 struct inode *sd_statfs_inode;
741 struct inode *sd_sc_inode;
742 struct inode *sd_qc_inode;
743 struct inode *sd_rindex;
744 struct inode *sd_quota_inode;
746 /* StatFS stuff */
748 spinlock_t sd_statfs_spin;
749 struct gfs2_statfs_change_host sd_statfs_master;
750 struct gfs2_statfs_change_host sd_statfs_local;
751 int sd_statfs_force_sync;
753 /* Resource group stuff */
755 int sd_rindex_uptodate;
756 spinlock_t sd_rindex_spin;
757 struct rb_root sd_rindex_tree;
758 unsigned int sd_rgrps;
759 unsigned int sd_max_rg_data;
761 /* Journal index stuff */
763 struct list_head sd_jindex_list;
764 spinlock_t sd_jindex_spin;
765 struct mutex sd_jindex_mutex;
766 unsigned int sd_journals;
768 struct gfs2_jdesc *sd_jdesc;
769 struct gfs2_holder sd_journal_gh;
770 struct gfs2_holder sd_jinode_gh;
772 struct gfs2_holder sd_sc_gh;
773 struct gfs2_holder sd_qc_gh;
775 struct completion sd_journal_ready;
777 /* Daemon stuff */
779 struct task_struct *sd_logd_process;
780 struct task_struct *sd_quotad_process;
782 /* Quota stuff */
784 struct list_head sd_quota_list;
785 atomic_t sd_quota_count;
786 struct mutex sd_quota_mutex;
787 struct mutex sd_quota_sync_mutex;
788 wait_queue_head_t sd_quota_wait;
789 struct list_head sd_trunc_list;
790 spinlock_t sd_trunc_lock;
792 unsigned int sd_quota_slots;
793 unsigned long *sd_quota_bitmap;
794 spinlock_t sd_bitmap_lock;
796 u64 sd_quota_sync_gen;
798 /* Log stuff */
800 struct address_space sd_aspace;
802 spinlock_t sd_log_lock;
804 struct gfs2_trans *sd_log_tr;
805 unsigned int sd_log_blks_reserved;
806 int sd_log_committed_revoke;
808 atomic_t sd_log_pinned;
809 unsigned int sd_log_num_revoke;
811 struct list_head sd_log_revokes;
812 struct list_head sd_log_ordered;
813 spinlock_t sd_ordered_lock;
815 atomic_t sd_log_thresh1;
816 atomic_t sd_log_thresh2;
817 atomic_t sd_log_blks_free;
818 atomic_t sd_log_blks_needed;
819 wait_queue_head_t sd_log_waitq;
820 wait_queue_head_t sd_logd_waitq;
822 u64 sd_log_sequence;
823 unsigned int sd_log_head;
824 unsigned int sd_log_tail;
825 int sd_log_idle;
827 struct rw_semaphore sd_log_flush_lock;
828 atomic_t sd_log_in_flight;
829 struct bio *sd_log_bio;
830 wait_queue_head_t sd_log_flush_wait;
831 int sd_log_error;
833 atomic_t sd_reserving_log;
834 wait_queue_head_t sd_reserving_log_wait;
836 unsigned int sd_log_flush_head;
838 spinlock_t sd_ail_lock;
839 struct list_head sd_ail1_list;
840 struct list_head sd_ail2_list;
842 /* For quiescing the filesystem */
843 struct gfs2_holder sd_freeze_gh;
844 atomic_t sd_freeze_state;
845 struct mutex sd_freeze_mutex;
847 char sd_fsname[GFS2_FSNAME_LEN + 3 * sizeof(int) + 2];
848 char sd_table_name[GFS2_FSNAME_LEN];
849 char sd_proto_name[GFS2_FSNAME_LEN];
851 /* Debugging crud */
853 unsigned long sd_last_warning;
854 struct dentry *debugfs_dir; /* debugfs directory */
857 static inline void gfs2_glstats_inc(struct gfs2_glock *gl, int which)
859 gl->gl_stats.stats[which]++;
862 static inline void gfs2_sbstats_inc(const struct gfs2_glock *gl, int which)
864 const struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
865 preempt_disable();
866 this_cpu_ptr(sdp->sd_lkstats)->lkstats[gl->gl_name.ln_type].stats[which]++;
867 preempt_enable();
870 extern struct gfs2_rgrpd *gfs2_glock2rgrp(struct gfs2_glock *gl);
872 static inline unsigned gfs2_max_stuffed_size(const struct gfs2_inode *ip)
874 return GFS2_SB(&ip->i_inode)->sd_sb.sb_bsize - sizeof(struct gfs2_dinode);
877 #endif /* __INCORE_DOT_H__ */