Blame view
fs/gfs2/incore.h
16.3 KB
b3b94faa5
|
1 2 |
/* * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. |
29d38cd16
|
3 |
* Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. |
b3b94faa5
|
4 5 6 |
* * This copyrighted material is made available to anyone wishing to use, * modify, copy, or redistribute it subject to the terms and conditions |
e9fc2aa09
|
7 |
* of the GNU General Public License version 2. |
b3b94faa5
|
8 9 10 11 |
*/ #ifndef __INCORE_DOT_H__ #define __INCORE_DOT_H__ |
f2f7ba523
|
12 |
#include <linux/fs.h> |
57cc7215b
|
13 |
#include <linux/kobject.h> |
c4f68a130
|
14 |
#include <linux/workqueue.h> |
f057f6cdf
|
15 16 |
#include <linux/dlm.h> #include <linux/buffer_head.h> |
bc015cb84
|
17 18 |
#include <linux/rcupdate.h> #include <linux/rculist_bl.h> |
3942ae531
|
19 |
#include <linux/completion.h> |
7c9ca6211
|
20 |
#include <linux/rbtree.h> |
f2f7ba523
|
21 |
|
b3b94faa5
|
22 23 |
#define DIO_WAIT 0x00000010 #define DIO_METADATA 0x00000020 |
b3b94faa5
|
24 25 26 |
struct gfs2_log_operations; struct gfs2_log_element; |
b3b94faa5
|
27 28 |
struct gfs2_holder; struct gfs2_glock; |
b3b94faa5
|
29 |
struct gfs2_quota_data; |
b3b94faa5
|
30 31 32 |
struct gfs2_trans; struct gfs2_ail; struct gfs2_jdesc; |
b3b94faa5
|
33 |
struct gfs2_sbd; |
f057f6cdf
|
34 |
struct lm_lockops; |
b3b94faa5
|
35 36 |
typedef void (*gfs2_glop_bh_t) (struct gfs2_glock *gl, unsigned int ret); |
bb8d8a6f5
|
37 38 39 40 41 42 43 |
struct gfs2_log_header_host { u64 lh_sequence; /* Sequence number of this transaction */ u32 lh_flags; /* GFS2_LOG_HEAD_... */ u32 lh_tail; /* Block number of log tail */ u32 lh_blkno; u32 lh_hash; }; |
b3b94faa5
|
44 45 46 47 48 49 50 |
/* * Structure of operations that are associated with each * type of element in the log. */ struct gfs2_log_operations { void (*lo_add) (struct gfs2_sbd *sdp, struct gfs2_log_element *le); |
b3b94faa5
|
51 52 53 |
void (*lo_before_commit) (struct gfs2_sbd *sdp); void (*lo_after_commit) (struct gfs2_sbd *sdp, struct gfs2_ail *ai); void (*lo_before_scan) (struct gfs2_jdesc *jd, |
551676226
|
54 |
struct gfs2_log_header_host *head, int pass); |
b3b94faa5
|
55 56 57 58 |
int (*lo_scan_elements) (struct gfs2_jdesc *jd, unsigned int start, struct gfs2_log_descriptor *ld, __be64 *ptr, int pass); void (*lo_after_scan) (struct gfs2_jdesc *jd, int error, int pass); |
b09e593d7
|
59 |
const char *lo_name; |
b3b94faa5
|
60 61 62 63 |
}; struct gfs2_log_element { struct list_head le_list; |
b09e593d7
|
64 |
const struct gfs2_log_operations *le_ops; |
b3b94faa5
|
65 |
}; |
60a0b8f93
|
66 |
#define GBF_FULL 1 |
b3b94faa5
|
67 68 69 |
struct gfs2_bitmap { struct buffer_head *bi_bh; char *bi_clone; |
60a0b8f93
|
70 |
unsigned long bi_flags; |
cd915493f
|
71 72 73 |
u32 bi_offset; u32 bi_start; u32 bi_len; |
b3b94faa5
|
74 75 76 |
}; struct gfs2_rgrpd { |
7c9ca6211
|
77 |
struct rb_node rd_node; /* Link with superblock */ |
b3b94faa5
|
78 |
struct gfs2_glock *rd_gl; /* Glock for this rgrp */ |
bb8d8a6f5
|
79 80 81 82 83 |
u64 rd_addr; /* grp block disk address */ u64 rd_data0; /* first data location */ u32 rd_length; /* length of rgrp header in fs blocks */ u32 rd_data; /* num of data blocks in rgrp */ u32 rd_bitbytes; /* number of bytes in data bitmaps */ |
cfc8b5492
|
84 |
u32 rd_free; |
73f749483
|
85 86 |
u32 rd_free_clone; u32 rd_dinodes; |
d8b71f738
|
87 |
u64 rd_igeneration; |
b3b94faa5
|
88 |
struct gfs2_bitmap *rd_bits; |
b3b94faa5
|
89 |
struct gfs2_sbd *rd_sbd; |
73f749483
|
90 |
u32 rd_last_alloc; |
1ce97e564
|
91 |
u32 rd_flags; |
090109783
|
92 93 94 95 |
#define GFS2_RDF_CHECK 0x10000000 /* check for unlinked inodes */ #define GFS2_RDF_UPTODATE 0x20000000 /* rg is up to date */ #define GFS2_RDF_ERROR 0x40000000 /* error in rg */ #define GFS2_RDF_MASK 0xf0000000 /* mask for internal flags */ |
b3b94faa5
|
96 97 98 99 |
}; enum gfs2_state_bits { BH_Pinned = BH_PrivateStart, |
f42faf4fa
|
100 |
BH_Escaped = BH_PrivateStart + 1, |
64dd153c8
|
101 |
BH_Zeronew = BH_PrivateStart + 2, |
b3b94faa5
|
102 103 104 105 |
}; BUFFER_FNS(Pinned, pinned) TAS_BUFFER_FNS(Pinned, pinned) |
f42faf4fa
|
106 107 |
BUFFER_FNS(Escaped, escaped) TAS_BUFFER_FNS(Escaped, escaped) |
64dd153c8
|
108 109 |
BUFFER_FNS(Zeronew, zeronew) TAS_BUFFER_FNS(Zeronew, zeronew) |
b3b94faa5
|
110 111 112 113 |
struct gfs2_bufdata { struct buffer_head *bd_bh; struct gfs2_glock *bd_gl; |
82e86087b
|
114 115 116 117 118 119 |
union { struct list_head list_tr; u64 blkno; } u; #define bd_list_tr u.list_tr #define bd_blkno u.blkno |
b3b94faa5
|
120 121 122 123 124 125 |
struct gfs2_log_element bd_le; struct gfs2_ail *bd_ail; struct list_head bd_ail_st_list; struct list_head bd_ail_gl_list; }; |
f057f6cdf
|
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
/* * Internally, we prefix things with gdlm_ and GDLM_ (for gfs-dlm) since a * prefix of lock_dlm_ gets awkward. */ #define GDLM_STRNAME_BYTES 25 #define GDLM_LVB_SIZE 32 enum { DFL_BLOCK_LOCKS = 0, }; struct lm_lockname { u64 ln_number; unsigned int ln_type; }; #define lm_name_equal(name1, name2) \ (((name1)->ln_number == (name2)->ln_number) && \ ((name1)->ln_type == (name2)->ln_type)) |
b3b94faa5
|
146 |
struct gfs2_glock_operations { |
b5d32bead
|
147 |
void (*go_xmote_th) (struct gfs2_glock *gl); |
6802e3400
|
148 |
int (*go_xmote_bh) (struct gfs2_glock *gl, struct gfs2_holder *gh); |
1a14d3a68
|
149 |
void (*go_inval) (struct gfs2_glock *gl, int flags); |
97cc1025b
|
150 |
int (*go_demote_ok) (const struct gfs2_glock *gl); |
1a14d3a68
|
151 152 |
int (*go_lock) (struct gfs2_holder *gh); void (*go_unlock) (struct gfs2_holder *gh); |
6802e3400
|
153 |
int (*go_dump)(struct seq_file *seq, const struct gfs2_glock *gl); |
b94a170e9
|
154 |
void (*go_callback) (struct gfs2_glock *gl); |
8fb4b536e
|
155 |
const int go_type; |
009d85183
|
156 157 |
const unsigned long go_flags; #define GLOF_ASPACE 1 |
b3b94faa5
|
158 159 160 |
}; enum { |
b3b94faa5
|
161 |
/* States */ |
6802e3400
|
162 |
HIF_HOLDER = 6, /* Set for gh that "holds" the glock */ |
b3b94faa5
|
163 |
HIF_FIRST = 7, |
fee852e37
|
164 |
HIF_WAIT = 10, |
b3b94faa5
|
165 166 167 168 169 170 |
}; struct gfs2_holder { struct list_head gh_list; struct gfs2_glock *gh_gl; |
b1e058da5
|
171 |
struct pid *gh_owner_pid; |
b3b94faa5
|
172 |
unsigned int gh_state; |
fe1bdedc6
|
173 |
unsigned gh_flags; |
b3b94faa5
|
174 175 |
int gh_error; |
6802e3400
|
176 |
unsigned long gh_iflags; /* HIF_... */ |
d0dc80dba
|
177 |
unsigned long gh_ip; |
b3b94faa5
|
178 179 180 |
}; enum { |
6802e3400
|
181 |
GLF_LOCK = 1, |
6802e3400
|
182 183 184 185 186 187 188 |
GLF_DEMOTE = 3, GLF_PENDING_DEMOTE = 4, GLF_DEMOTE_IN_PROGRESS = 5, GLF_DIRTY = 6, GLF_LFLUSH = 7, GLF_INVALIDATE_IN_PROGRESS = 8, GLF_REPLY_PENDING = 9, |
f057f6cdf
|
189 190 |
GLF_INITIAL = 10, GLF_FROZEN = 11, |
7b5e3d5fc
|
191 |
GLF_QUEUED = 12, |
627c10b7e
|
192 193 |
GLF_LRU = 13, GLF_OBJECT = 14, /* Used only for tracing */ |
b3b94faa5
|
194 195 196 |
}; struct gfs2_glock { |
bc015cb84
|
197 |
struct hlist_bl_node gl_list; |
b3b94faa5
|
198 199 |
unsigned long gl_flags; /* GLF_... */ struct lm_lockname gl_name; |
16feb9fec
|
200 |
atomic_t gl_ref; |
b3b94faa5
|
201 202 |
spinlock_t gl_spin; |
47a25380e
|
203 204 205 206 207 208 |
/* State fields protected by gl_spin */ unsigned int gl_state:2, /* Current state */ gl_target:2, /* Target state */ gl_demote_state:2, /* State requested by remote node */ gl_req:2, /* State in last dlm request */ gl_reply:8; /* Last reply from the dlm */ |
37b2fa6a2
|
209 |
unsigned int gl_hash; |
3b8249f61
|
210 |
unsigned long gl_demote_time; /* time of first demote request */ |
7cf8dcd3b
|
211 |
long gl_hold_time; |
b3b94faa5
|
212 |
struct list_head gl_holders; |
b3b94faa5
|
213 |
|
8fb4b536e
|
214 |
const struct gfs2_glock_operations *gl_ops; |
f057f6cdf
|
215 216 217 |
char gl_strname[GDLM_STRNAME_BYTES]; struct dlm_lksb gl_lksb; char gl_lvb[32]; |
c4f68a130
|
218 |
unsigned long gl_tchange; |
b3b94faa5
|
219 |
void *gl_object; |
97cc1025b
|
220 |
struct list_head gl_lru; |
b3b94faa5
|
221 222 |
struct gfs2_sbd *gl_sbd; |
b3b94faa5
|
223 224 |
struct list_head gl_ail_list; atomic_t gl_ail_count; |
f42ab0852
|
225 |
atomic_t gl_revokes; |
c4f68a130
|
226 |
struct delayed_work gl_work; |
b94a170e9
|
227 |
struct work_struct gl_delete; |
bc015cb84
|
228 |
struct rcu_head gl_rcu; |
b3b94faa5
|
229 |
}; |
da755fdb4
|
230 |
#define GFS2_MIN_LVB_SIZE 32 /* Min size of LVB that gfs2 supports */ |
b3b94faa5
|
231 232 |
struct gfs2_alloc { /* Quota stuff */ |
e9fc2aa09
|
233 234 |
struct gfs2_quota_data *al_qd[2*MAXQUOTAS]; struct gfs2_holder al_qd_ghs[2*MAXQUOTAS]; |
6b61b072a
|
235 |
unsigned int al_qd_num; |
b3b94faa5
|
236 |
|
6b61b072a
|
237 238 |
u32 al_requested; /* Filled in by caller of gfs2_inplace_reserve() */ u32 al_alloced; /* Filled in by gfs2_alloc_*() */ |
b3b94faa5
|
239 240 |
/* Filled in by gfs2_inplace_reserve() */ |
b3b94faa5
|
241 |
struct gfs2_holder al_rgd_gh; |
b3b94faa5
|
242 243 244 |
}; enum { |
bfded27ba
|
245 |
GIF_INVALID = 0, |
b3b94faa5
|
246 |
GIF_QD_LOCKED = 1, |
40ac218f5
|
247 |
GIF_ALLOC_FAILED = 2, |
b3b94faa5
|
248 249 |
GIF_SW_PAGED = 3, }; |
bb8d8a6f5
|
250 |
|
b3b94faa5
|
251 |
struct gfs2_inode { |
320dd101e
|
252 |
struct inode i_inode; |
dbb7cae2a
|
253 254 |
u64 i_no_addr; u64 i_no_formal_ino; |
bcf0b5b34
|
255 |
u64 i_generation; |
3767ac21f
|
256 |
u64 i_eattr; |
b3b94faa5
|
257 |
unsigned long i_flags; /* GIF_... */ |
feaa7bba0
|
258 |
struct gfs2_glock *i_gl; /* Move into i_gh? */ |
b3b94faa5
|
259 |
struct gfs2_holder i_iopen_gh; |
f42faf4fa
|
260 |
struct gfs2_holder i_gh; /* for prepare/commit_write only */ |
6dbd82248
|
261 |
struct gfs2_alloc *i_alloc; |
54335b1fc
|
262 |
struct gfs2_rgrpd *i_rgd; |
ce276b06e
|
263 |
u64 i_goal; /* goal block for allocations */ |
b3b94faa5
|
264 |
struct rw_semaphore i_rw_mutex; |
813e0c46c
|
265 |
struct list_head i_trunc_list; |
17d539f04
|
266 |
__be64 *i_hash_cache; |
ad6203f2b
|
267 |
u32 i_entries; |
383f01fbf
|
268 |
u32 i_diskflags; |
ecc30c791
|
269 |
u8 i_height; |
9a0045088
|
270 |
u8 i_depth; |
b3b94faa5
|
271 |
}; |
feaa7bba0
|
272 273 274 275 |
/* * Since i_inode is the first element of struct gfs2_inode, * this is effectively a cast. */ |
320dd101e
|
276 277 278 279 |
static inline struct gfs2_inode *GFS2_I(struct inode *inode) { return container_of(inode, struct gfs2_inode, i_inode); } |
bf36a7131
|
280 |
static inline struct gfs2_sbd *GFS2_SB(const struct inode *inode) |
feaa7bba0
|
281 282 283 |
{ return inode->i_sb->s_fs_info; } |
b3b94faa5
|
284 |
struct gfs2_file { |
f55ab26a8
|
285 |
struct mutex f_fl_mutex; |
b3b94faa5
|
286 |
struct gfs2_holder f_fl_gh; |
b3b94faa5
|
287 |
}; |
b3b94faa5
|
288 289 |
struct gfs2_revoke_replay { struct list_head rr_list; |
cd915493f
|
290 |
u64 rr_blkno; |
b3b94faa5
|
291 292 293 294 |
unsigned int rr_where; }; enum { |
b3b94faa5
|
295 296 297 |
QDF_USER = 0, QDF_CHANGE = 1, QDF_LOCKED = 2, |
662e3a551
|
298 |
QDF_REFRESH = 3, |
b3b94faa5
|
299 300 301 302 |
}; struct gfs2_quota_data { struct list_head qd_list; |
0a7ab79c5
|
303 304 305 |
struct list_head qd_reclaim; atomic_t qd_count; |
b3b94faa5
|
306 |
|
cd915493f
|
307 |
u32 qd_id; |
b3b94faa5
|
308 |
unsigned long qd_flags; /* QDF_... */ |
cd915493f
|
309 310 |
s64 qd_change; s64 qd_change_sync; |
b3b94faa5
|
311 312 313 314 315 316 317 318 319 320 |
unsigned int qd_slot; unsigned int qd_slot_count; struct buffer_head *qd_bh; struct gfs2_quota_change *qd_bh_qc; unsigned int qd_bh_count; struct gfs2_glock *qd_gl; struct gfs2_quota_lvb qd_qb; |
cd915493f
|
321 |
u64 qd_sync_gen; |
b3b94faa5
|
322 |
unsigned long qd_last_warn; |
b3b94faa5
|
323 |
}; |
b3b94faa5
|
324 |
struct gfs2_trans { |
d0dc80dba
|
325 |
unsigned long tr_ip; |
b3b94faa5
|
326 327 328 329 |
unsigned int tr_blocks; unsigned int tr_revokes; unsigned int tr_reserved; |
e317ffcb7
|
330 |
struct gfs2_holder tr_t_gh; |
b3b94faa5
|
331 332 333 334 335 |
int tr_touched; unsigned int tr_num_buf; unsigned int tr_num_buf_new; |
2332c4435
|
336 |
unsigned int tr_num_databuf_new; |
b3b94faa5
|
337 |
unsigned int tr_num_buf_rm; |
2332c4435
|
338 |
unsigned int tr_num_databuf_rm; |
b3b94faa5
|
339 340 341 342 343 344 345 346 347 348 349 350 |
struct list_head tr_list_buf; unsigned int tr_num_revoke; unsigned int tr_num_revoke_rm; }; struct gfs2_ail { struct list_head ai_list; unsigned int ai_first; struct list_head ai_ail1_list; struct list_head ai_ail2_list; |
b3b94faa5
|
351 |
}; |
da6dd40d5
|
352 353 354 355 356 357 358 |
struct gfs2_journal_extent { struct list_head extent_list; unsigned int lblock; /* First logical block */ u64 dblock; /* First disk block */ u64 blocks; }; |
b3b94faa5
|
359 360 |
struct gfs2_jdesc { struct list_head jd_list; |
da6dd40d5
|
361 |
struct list_head extent_list; |
6ecd7c2dd
|
362 |
struct work_struct jd_work; |
7359a19cc
|
363 |
struct inode *jd_inode; |
fe64d517d
|
364 365 |
unsigned long jd_flags; #define JDF_RECOVERY 1 |
b3b94faa5
|
366 |
unsigned int jd_jid; |
b3b94faa5
|
367 368 |
unsigned int jd_blocks; }; |
bb8d8a6f5
|
369 370 371 372 373 |
struct gfs2_statfs_change_host { s64 sc_total; s64 sc_free; s64 sc_dinodes; }; |
b3b94faa5
|
374 375 376 377 378 379 380 381 |
#define GFS2_QUOTA_DEFAULT GFS2_QUOTA_OFF #define GFS2_QUOTA_OFF 0 #define GFS2_QUOTA_ACCOUNT 1 #define GFS2_QUOTA_ON 2 #define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED #define GFS2_DATA_WRITEBACK 1 #define GFS2_DATA_ORDERED 2 |
d34843d0c
|
382 383 384 385 386 |
#define GFS2_ERRORS_DEFAULT GFS2_ERRORS_WITHDRAW #define GFS2_ERRORS_WITHDRAW 0 #define GFS2_ERRORS_CONTINUE 1 /* place holder for future feature */ #define GFS2_ERRORS_RO 2 /* place holder for future feature */ #define GFS2_ERRORS_PANIC 3 |
b3b94faa5
|
387 |
struct gfs2_args { |
37ec89e83
|
388 389 390 391 |
char ar_lockproto[GFS2_LOCKNAME_LEN]; /* Name of the Lock Protocol */ char ar_locktable[GFS2_LOCKNAME_LEN]; /* Name of the Lock Table */ char ar_hostdata[GFS2_LOCKNAME_LEN]; /* Host specific data */ unsigned int ar_spectator:1; /* Don't get a journal */ |
37ec89e83
|
392 |
unsigned int ar_localflocks:1; /* Let the VFS do flock|fcntl */ |
37ec89e83
|
393 |
unsigned int ar_debug:1; /* Oops on errors */ |
37ec89e83
|
394 395 396 397 398 |
unsigned int ar_posix_acl:1; /* Enable posix acls */ unsigned int ar_quota:2; /* off/account/on */ unsigned int ar_suiddir:1; /* suiddir support */ unsigned int ar_data:2; /* ordered/writeback */ unsigned int ar_meta:1; /* mount metafs */ |
f15ab5619
|
399 |
unsigned int ar_discard:1; /* discard requests */ |
d34843d0c
|
400 |
unsigned int ar_errors:2; /* errors=withdraw | panic */ |
f25934c5f
|
401 |
unsigned int ar_nobarrier:1; /* do not send barriers */ |
48c2b6136
|
402 |
int ar_commit; /* Commit interval */ |
3d3c10f2c
|
403 404 405 |
int ar_statfs_quantum; /* The fast statfs interval */ int ar_quota_quantum; /* The quota interval */ int ar_statfs_percent; /* The % change to force sync */ |
b3b94faa5
|
406 407 408 409 |
}; struct gfs2_tune { spinlock_t gt_spin; |
b3b94faa5
|
410 |
unsigned int gt_logd_secs; |
b3b94faa5
|
411 412 413 414 415 |
unsigned int gt_quota_simul_sync; /* Max quotavals to sync at once */ unsigned int gt_quota_warn_period; /* Secs between quota warn msgs */ unsigned int gt_quota_scale_num; /* Numerator */ unsigned int gt_quota_scale_den; /* Denominator */ |
b3b94faa5
|
416 |
unsigned int gt_quota_quantum; /* Secs between syncs to quota file */ |
b3b94faa5
|
417 |
unsigned int gt_new_files_jdata; |
b3b94faa5
|
418 |
unsigned int gt_max_readahead; /* Max bytes to read-ahead from disk */ |
b3b94faa5
|
419 |
unsigned int gt_complain_secs; |
b3b94faa5
|
420 421 422 |
unsigned int gt_statfs_quantum; unsigned int gt_statfs_slow; }; |
b3b94faa5
|
423 424 425 426 |
enum { SDF_JOURNAL_CHECKED = 0, SDF_JOURNAL_LIVE = 1, SDF_SHUTDOWN = 2, |
254db57f9
|
427 |
SDF_NOBARRIERS = 3, |
fe64d517d
|
428 |
SDF_NORECOVERY = 4, |
913a71d25
|
429 |
SDF_DEMOTE = 5, |
ba6e93645
|
430 |
SDF_NOJOURNALID = 6, |
b3b94faa5
|
431 |
}; |
b3b94faa5
|
432 |
#define GFS2_FSNAME_LEN 256 |
bb8d8a6f5
|
433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
struct gfs2_inum_host { u64 no_formal_ino; u64 no_addr; }; struct gfs2_sb_host { u32 sb_magic; u32 sb_type; u32 sb_format; u32 sb_fs_format; u32 sb_multihost_format; u32 sb_bsize; u32 sb_bsize_shift; struct gfs2_inum_host sb_master_dir; struct gfs2_inum_host sb_root_dir; char sb_lockproto[GFS2_LOCKNAME_LEN]; char sb_locktable[GFS2_LOCKNAME_LEN]; }; |
f057f6cdf
|
454 455 456 457 458 459 460 461 462 463 |
/* * lm_mount() return values * * ls_jid - the journal ID this node should use * ls_first - this node is the first to mount the file system * ls_lockspace - lock module's context for this file system * ls_ops - lock module's functions */ struct lm_lockstruct { |
feb47ca93
|
464 |
int ls_jid; |
f057f6cdf
|
465 466 467 468 469 470 |
unsigned int ls_first; unsigned int ls_first_done; unsigned int ls_nodir; const struct lm_lockops *ls_ops; unsigned long ls_flags; dlm_lockspace_t *ls_dlm; |
f057f6cdf
|
471 472 473 |
int ls_recover_jid_done; int ls_recover_jid_status; }; |
b3b94faa5
|
474 475 476 477 |
struct gfs2_sbd { struct super_block *sd_vfs; struct kobject sd_kobj; unsigned long sd_flags; /* SDF_... */ |
f50dfaf78
|
478 |
struct gfs2_sb_host sd_sb; |
b3b94faa5
|
479 480 |
/* Constants computed on mount */ |
cd915493f
|
481 482 483 484 485 486 487 488 489 490 491 |
u32 sd_fsb2bb; u32 sd_fsb2bb_shift; u32 sd_diptrs; /* Number of pointers in a dinode */ u32 sd_inptrs; /* Number of pointers in a indirect block */ u32 sd_jbsize; /* Size of a journaled data block */ u32 sd_hash_bsize; /* sizeof(exhash block) */ u32 sd_hash_bsize_shift; u32 sd_hash_ptrs; /* Number of pointers in a hash block */ u32 sd_qc_per_block; u32 sd_max_dirres; /* Max blocks needed to add a directory entry */ u32 sd_max_height; /* Max height of a file's metadata tree */ |
ecc30c791
|
492 |
u64 sd_heightsize[GFS2_MAX_META_HEIGHT + 1]; |
cd915493f
|
493 |
u32 sd_max_jheight; /* Max height of journaled file's meta tree */ |
ecc30c791
|
494 |
u64 sd_jheightsize[GFS2_MAX_META_HEIGHT + 1]; |
b3b94faa5
|
495 496 497 498 499 500 501 |
struct gfs2_args sd_args; /* Mount arguments */ struct gfs2_tune sd_tune; /* Filesystem tuning structure */ /* Lock Stuff */ struct lm_lockstruct sd_lockstruct; |
b3b94faa5
|
502 503 504 |
struct gfs2_holder sd_live_gh; struct gfs2_glock *sd_rename_gl; struct gfs2_glock *sd_trans_gl; |
e402746a9
|
505 506 |
wait_queue_head_t sd_glock_wait; atomic_t sd_glock_disposal; |
3942ae531
|
507 |
struct completion sd_locking_init; |
b3b94faa5
|
508 509 |
/* Inode Stuff */ |
9b8df98fc
|
510 511 |
struct dentry *sd_master_dir; struct dentry *sd_root_dir; |
f42faf4fa
|
512 |
struct inode *sd_jindex; |
f42faf4fa
|
513 |
struct inode *sd_statfs_inode; |
f42faf4fa
|
514 |
struct inode *sd_sc_inode; |
f42faf4fa
|
515 516 517 |
struct inode *sd_qc_inode; struct inode *sd_rindex; struct inode *sd_quota_inode; |
b3b94faa5
|
518 |
|
b3b94faa5
|
519 520 521 |
/* StatFS stuff */ spinlock_t sd_statfs_spin; |
bd209cc01
|
522 523 |
struct gfs2_statfs_change_host sd_statfs_master; struct gfs2_statfs_change_host sd_statfs_local; |
3d3c10f2c
|
524 |
int sd_statfs_force_sync; |
b3b94faa5
|
525 526 |
/* Resource group stuff */ |
cf45b752c
|
527 |
int sd_rindex_uptodate; |
b3b94faa5
|
528 |
spinlock_t sd_rindex_spin; |
f55ab26a8
|
529 |
struct mutex sd_rindex_mutex; |
7c9ca6211
|
530 |
struct rb_root sd_rindex_tree; |
b3b94faa5
|
531 |
unsigned int sd_rgrps; |
3921120e7
|
532 |
unsigned int sd_max_rg_data; |
b3b94faa5
|
533 534 535 536 537 |
/* Journal index stuff */ struct list_head sd_jindex_list; spinlock_t sd_jindex_spin; |
f55ab26a8
|
538 |
struct mutex sd_jindex_mutex; |
b3b94faa5
|
539 |
unsigned int sd_journals; |
b3b94faa5
|
540 541 542 543 |
struct gfs2_jdesc *sd_jdesc; struct gfs2_holder sd_journal_gh; struct gfs2_holder sd_jinode_gh; |
b3b94faa5
|
544 |
struct gfs2_holder sd_sc_gh; |
b3b94faa5
|
545 546 547 |
struct gfs2_holder sd_qc_gh; /* Daemon stuff */ |
b3b94faa5
|
548 549 |
struct task_struct *sd_logd_process; struct task_struct *sd_quotad_process; |
b3b94faa5
|
550 |
|
b3b94faa5
|
551 552 553 554 |
/* Quota stuff */ struct list_head sd_quota_list; atomic_t sd_quota_count; |
f55ab26a8
|
555 |
struct mutex sd_quota_mutex; |
37b2c8377
|
556 |
wait_queue_head_t sd_quota_wait; |
813e0c46c
|
557 558 |
struct list_head sd_trunc_list; spinlock_t sd_trunc_lock; |
b3b94faa5
|
559 560 561 562 |
unsigned int sd_quota_slots; unsigned int sd_quota_chunks; unsigned char **sd_quota_bitmap; |
cd915493f
|
563 |
u64 sd_quota_sync_gen; |
b3b94faa5
|
564 565 566 567 |
/* Log stuff */ spinlock_t sd_log_lock; |
b3b94faa5
|
568 569 570 |
unsigned int sd_log_blks_reserved; unsigned int sd_log_commited_buf; |
2332c4435
|
571 |
unsigned int sd_log_commited_databuf; |
2e95e3f66
|
572 |
int sd_log_commited_revoke; |
b3b94faa5
|
573 |
|
5e687eac1
|
574 |
atomic_t sd_log_pinned; |
b3b94faa5
|
575 576 577 578 |
unsigned int sd_log_num_buf; unsigned int sd_log_num_revoke; unsigned int sd_log_num_rg; unsigned int sd_log_num_databuf; |
f42faf4fa
|
579 |
|
b3b94faa5
|
580 581 582 583 |
struct list_head sd_log_le_buf; struct list_head sd_log_le_revoke; struct list_head sd_log_le_rg; struct list_head sd_log_le_databuf; |
d7b616e25
|
584 |
struct list_head sd_log_le_ordered; |
b3b94faa5
|
585 |
|
5e687eac1
|
586 587 |
atomic_t sd_log_thresh1; atomic_t sd_log_thresh2; |
fd041f0b4
|
588 |
atomic_t sd_log_blks_free; |
5e687eac1
|
589 590 |
wait_queue_head_t sd_log_waitq; wait_queue_head_t sd_logd_waitq; |
b3b94faa5
|
591 |
|
cd915493f
|
592 |
u64 sd_log_sequence; |
b3b94faa5
|
593 594 |
unsigned int sd_log_head; unsigned int sd_log_tail; |
b3b94faa5
|
595 |
int sd_log_idle; |
484adff8a
|
596 |
struct rw_semaphore sd_log_flush_lock; |
16615be18
|
597 598 |
atomic_t sd_log_in_flight; wait_queue_head_t sd_log_flush_wait; |
b3b94faa5
|
599 600 |
unsigned int sd_log_flush_head; |
cd915493f
|
601 |
u64 sd_log_flush_wrapped; |
b3b94faa5
|
602 |
|
d6a079e82
|
603 |
spinlock_t sd_ail_lock; |
b3b94faa5
|
604 605 |
struct list_head sd_ail1_list; struct list_head sd_ail2_list; |
b3b94faa5
|
606 607 608 609 610 611 612 613 614 615 616 617 618 |
/* Replay stuff */ struct list_head sd_revoke_list; unsigned int sd_replay_tail; unsigned int sd_found_blocks; unsigned int sd_found_revokes; unsigned int sd_replayed_blocks; /* For quiescing the filesystem */ struct gfs2_holder sd_freeze_gh; |
f55ab26a8
|
619 |
struct mutex sd_freeze_lock; |
b3b94faa5
|
620 |
unsigned int sd_freeze_count; |
b3b94faa5
|
621 622 623 624 625 626 627 |
char sd_fsname[GFS2_FSNAME_LEN]; char sd_table_name[GFS2_FSNAME_LEN]; char sd_proto_name[GFS2_FSNAME_LEN]; /* Debugging crud */ unsigned long sd_last_warning; |
5f8820960
|
628 629 |
struct dentry *debugfs_dir; /* debugfs directory */ struct dentry *debugfs_dentry_glocks; /* for debugfs */ |
b3b94faa5
|
630 631 632 |
}; #endif /* __INCORE_DOT_H__ */ |