1 /* 2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. 4 * 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 */ 9 10 #ifndef __INCORE_DOT_H__ 11 #define __INCORE_DOT_H__ 12 13 #include <linux/fs.h> 14 15 #define DIO_WAIT 0x00000010 16 #define DIO_METADATA 0x00000020 17 #define DIO_ALL 0x00000100 18 19 struct gfs2_log_operations; 20 struct gfs2_log_element; 21 struct gfs2_holder; 22 struct gfs2_glock; 23 struct gfs2_quota_data; 24 struct gfs2_trans; 25 struct gfs2_ail; 26 struct gfs2_jdesc; 27 struct gfs2_sbd; 28 29 typedef void (*gfs2_glop_bh_t) (struct gfs2_glock *gl, unsigned int ret); 30 31 /* 32 * Structure of operations that are associated with each 33 * type of element in the log. 34 */ 35 36 struct gfs2_log_operations { 37 void (*lo_add) (struct gfs2_sbd *sdp, struct gfs2_log_element *le); 38 void (*lo_incore_commit) (struct gfs2_sbd *sdp, struct gfs2_trans *tr); 39 void (*lo_before_commit) (struct gfs2_sbd *sdp); 40 void (*lo_after_commit) (struct gfs2_sbd *sdp, struct gfs2_ail *ai); 41 void (*lo_before_scan) (struct gfs2_jdesc *jd, 42 struct gfs2_log_header_host *head, int pass); 43 int (*lo_scan_elements) (struct gfs2_jdesc *jd, unsigned int start, 44 struct gfs2_log_descriptor *ld, __be64 *ptr, 45 int pass); 46 void (*lo_after_scan) (struct gfs2_jdesc *jd, int error, int pass); 47 const char *lo_name; 48 }; 49 50 struct gfs2_log_element { 51 struct list_head le_list; 52 const struct gfs2_log_operations *le_ops; 53 }; 54 55 struct gfs2_bitmap { 56 struct buffer_head *bi_bh; 57 char *bi_clone; 58 u32 bi_offset; 59 u32 bi_start; 60 u32 bi_len; 61 }; 62 63 struct gfs2_rgrpd { 64 struct list_head rd_list; /* Link with superblock */ 65 struct list_head rd_list_mru; 66 struct list_head rd_recent; /* Recently used rgrps */ 67 struct gfs2_glock *rd_gl; /* Glock for this rgrp */ 68 struct gfs2_rindex_host rd_ri; 69 struct gfs2_rgrp_host rd_rg; 70 u64 rd_rg_vn; 71 struct gfs2_bitmap *rd_bits; 72 unsigned int rd_bh_count; 73 struct mutex rd_mutex; 74 u32 rd_free_clone; 75 struct gfs2_log_element rd_le; 76 u32 rd_last_alloc_data; 77 u32 rd_last_alloc_meta; 78 struct gfs2_sbd *rd_sbd; 79 }; 80 81 enum gfs2_state_bits { 82 BH_Pinned = BH_PrivateStart, 83 BH_Escaped = BH_PrivateStart + 1, 84 }; 85 86 BUFFER_FNS(Pinned, pinned) 87 TAS_BUFFER_FNS(Pinned, pinned) 88 BUFFER_FNS(Escaped, escaped) 89 TAS_BUFFER_FNS(Escaped, escaped) 90 91 struct gfs2_bufdata { 92 struct buffer_head *bd_bh; 93 struct gfs2_glock *bd_gl; 94 95 struct list_head bd_list_tr; 96 struct gfs2_log_element bd_le; 97 98 struct gfs2_ail *bd_ail; 99 struct list_head bd_ail_st_list; 100 struct list_head bd_ail_gl_list; 101 }; 102 103 struct gfs2_glock_operations { 104 void (*go_xmote_th) (struct gfs2_glock *gl); 105 void (*go_xmote_bh) (struct gfs2_glock *gl); 106 void (*go_drop_th) (struct gfs2_glock *gl); 107 void (*go_inval) (struct gfs2_glock *gl, int flags); 108 int (*go_demote_ok) (struct gfs2_glock *gl); 109 int (*go_lock) (struct gfs2_holder *gh); 110 void (*go_unlock) (struct gfs2_holder *gh); 111 const int go_type; 112 }; 113 114 enum { 115 /* Actions */ 116 HIF_MUTEX = 0, 117 HIF_PROMOTE = 1, 118 119 /* States */ 120 HIF_HOLDER = 6, 121 HIF_FIRST = 7, 122 HIF_ABORTED = 9, 123 HIF_WAIT = 10, 124 }; 125 126 struct gfs2_holder { 127 struct list_head gh_list; 128 129 struct gfs2_glock *gh_gl; 130 pid_t gh_owner_pid; 131 unsigned int gh_state; 132 unsigned gh_flags; 133 134 int gh_error; 135 unsigned long gh_iflags; 136 unsigned long gh_ip; 137 }; 138 139 enum { 140 GLF_LOCK = 1, 141 GLF_STICKY = 2, 142 GLF_DEMOTE = 3, 143 GLF_DIRTY = 5, 144 }; 145 146 struct gfs2_glock { 147 struct hlist_node gl_list; 148 unsigned long gl_flags; /* GLF_... */ 149 struct lm_lockname gl_name; 150 atomic_t gl_ref; 151 152 spinlock_t gl_spin; 153 154 unsigned int gl_state; 155 unsigned int gl_hash; 156 unsigned int gl_demote_state; /* state requested by remote node */ 157 unsigned long gl_demote_time; /* time of first demote request */ 158 pid_t gl_owner_pid; 159 unsigned long gl_ip; 160 struct list_head gl_holders; 161 struct list_head gl_waiters1; /* HIF_MUTEX */ 162 struct list_head gl_waiters3; /* HIF_PROMOTE */ 163 164 const struct gfs2_glock_operations *gl_ops; 165 166 struct gfs2_holder *gl_req_gh; 167 gfs2_glop_bh_t gl_req_bh; 168 169 void *gl_lock; 170 char *gl_lvb; 171 atomic_t gl_lvb_count; 172 173 u64 gl_vn; 174 unsigned long gl_stamp; 175 void *gl_object; 176 177 struct list_head gl_reclaim; 178 179 struct gfs2_sbd *gl_sbd; 180 181 struct inode *gl_aspace; 182 struct gfs2_log_element gl_le; 183 struct list_head gl_ail_list; 184 atomic_t gl_ail_count; 185 }; 186 187 struct gfs2_alloc { 188 /* Quota stuff */ 189 190 struct gfs2_quota_data *al_qd[2*MAXQUOTAS]; 191 struct gfs2_holder al_qd_ghs[2*MAXQUOTAS]; 192 unsigned int al_qd_num; 193 194 u32 al_requested; /* Filled in by caller of gfs2_inplace_reserve() */ 195 u32 al_alloced; /* Filled in by gfs2_alloc_*() */ 196 197 /* Filled in by gfs2_inplace_reserve() */ 198 199 unsigned int al_line; 200 char *al_file; 201 struct gfs2_holder al_ri_gh; 202 struct gfs2_holder al_rgd_gh; 203 struct gfs2_rgrpd *al_rgd; 204 205 }; 206 207 enum { 208 GIF_INVALID = 0, 209 GIF_QD_LOCKED = 1, 210 GIF_PAGED = 2, 211 GIF_SW_PAGED = 3, 212 }; 213 214 struct gfs2_inode { 215 struct inode i_inode; 216 struct gfs2_inum_host i_num; 217 218 unsigned long i_flags; /* GIF_... */ 219 220 struct gfs2_dinode_host i_di; /* To be replaced by ref to block */ 221 222 struct gfs2_glock *i_gl; /* Move into i_gh? */ 223 struct gfs2_holder i_iopen_gh; 224 struct gfs2_holder i_gh; /* for prepare/commit_write only */ 225 struct gfs2_alloc i_alloc; 226 u64 i_last_rg_alloc; 227 228 spinlock_t i_spin; 229 struct rw_semaphore i_rw_mutex; 230 unsigned long i_last_pfault; 231 232 struct buffer_head *i_cache[GFS2_MAX_META_HEIGHT]; 233 }; 234 235 /* 236 * Since i_inode is the first element of struct gfs2_inode, 237 * this is effectively a cast. 238 */ 239 static inline struct gfs2_inode *GFS2_I(struct inode *inode) 240 { 241 return container_of(inode, struct gfs2_inode, i_inode); 242 } 243 244 /* To be removed? */ 245 static inline struct gfs2_sbd *GFS2_SB(struct inode *inode) 246 { 247 return inode->i_sb->s_fs_info; 248 } 249 250 enum { 251 GFF_DID_DIRECT_ALLOC = 0, 252 GFF_EXLOCK = 1, 253 }; 254 255 struct gfs2_file { 256 unsigned long f_flags; /* GFF_... */ 257 struct mutex f_fl_mutex; 258 struct gfs2_holder f_fl_gh; 259 }; 260 261 struct gfs2_revoke { 262 struct gfs2_log_element rv_le; 263 u64 rv_blkno; 264 }; 265 266 struct gfs2_revoke_replay { 267 struct list_head rr_list; 268 u64 rr_blkno; 269 unsigned int rr_where; 270 }; 271 272 enum { 273 QDF_USER = 0, 274 QDF_CHANGE = 1, 275 QDF_LOCKED = 2, 276 }; 277 278 struct gfs2_quota_lvb { 279 __be32 qb_magic; 280 u32 __pad; 281 __be64 qb_limit; /* Hard limit of # blocks to alloc */ 282 __be64 qb_warn; /* Warn user when alloc is above this # */ 283 __be64 qb_value; /* Current # blocks allocated */ 284 }; 285 286 struct gfs2_quota_data { 287 struct list_head qd_list; 288 unsigned int qd_count; 289 290 u32 qd_id; 291 unsigned long qd_flags; /* QDF_... */ 292 293 s64 qd_change; 294 s64 qd_change_sync; 295 296 unsigned int qd_slot; 297 unsigned int qd_slot_count; 298 299 struct buffer_head *qd_bh; 300 struct gfs2_quota_change *qd_bh_qc; 301 unsigned int qd_bh_count; 302 303 struct gfs2_glock *qd_gl; 304 struct gfs2_quota_lvb qd_qb; 305 306 u64 qd_sync_gen; 307 unsigned long qd_last_warn; 308 unsigned long qd_last_touched; 309 }; 310 311 struct gfs2_log_buf { 312 struct list_head lb_list; 313 struct buffer_head *lb_bh; 314 struct buffer_head *lb_real; 315 }; 316 317 struct gfs2_trans { 318 unsigned long tr_ip; 319 320 unsigned int tr_blocks; 321 unsigned int tr_revokes; 322 unsigned int tr_reserved; 323 324 struct gfs2_holder tr_t_gh; 325 326 int tr_touched; 327 328 unsigned int tr_num_buf; 329 unsigned int tr_num_buf_new; 330 unsigned int tr_num_buf_rm; 331 struct list_head tr_list_buf; 332 333 unsigned int tr_num_revoke; 334 unsigned int tr_num_revoke_rm; 335 }; 336 337 struct gfs2_ail { 338 struct list_head ai_list; 339 340 unsigned int ai_first; 341 struct list_head ai_ail1_list; 342 struct list_head ai_ail2_list; 343 344 u64 ai_sync_gen; 345 }; 346 347 struct gfs2_jdesc { 348 struct list_head jd_list; 349 350 struct inode *jd_inode; 351 unsigned int jd_jid; 352 int jd_dirty; 353 354 unsigned int jd_blocks; 355 }; 356 357 #define GFS2_GLOCKD_DEFAULT 1 358 #define GFS2_GLOCKD_MAX 16 359 360 #define GFS2_QUOTA_DEFAULT GFS2_QUOTA_OFF 361 #define GFS2_QUOTA_OFF 0 362 #define GFS2_QUOTA_ACCOUNT 1 363 #define GFS2_QUOTA_ON 2 364 365 #define GFS2_DATA_DEFAULT GFS2_DATA_ORDERED 366 #define GFS2_DATA_WRITEBACK 1 367 #define GFS2_DATA_ORDERED 2 368 369 struct gfs2_args { 370 char ar_lockproto[GFS2_LOCKNAME_LEN]; /* Name of the Lock Protocol */ 371 char ar_locktable[GFS2_LOCKNAME_LEN]; /* Name of the Lock Table */ 372 char ar_hostdata[GFS2_LOCKNAME_LEN]; /* Host specific data */ 373 int ar_spectator; /* Don't get a journal because we're always RO */ 374 int ar_ignore_local_fs; /* Don't optimize even if local_fs is 1 */ 375 int ar_localflocks; /* Let the VFS do flock|fcntl locks for us */ 376 int ar_localcaching; /* Local-style caching (dangerous on multihost) */ 377 int ar_debug; /* Oops on errors instead of trying to be graceful */ 378 int ar_upgrade; /* Upgrade ondisk/multihost format */ 379 unsigned int ar_num_glockd; /* Number of glockd threads */ 380 int ar_posix_acl; /* Enable posix acls */ 381 int ar_quota; /* off/account/on */ 382 int ar_suiddir; /* suiddir support */ 383 int ar_data; /* ordered/writeback */ 384 }; 385 386 struct gfs2_tune { 387 spinlock_t gt_spin; 388 389 unsigned int gt_ilimit; 390 unsigned int gt_ilimit_tries; 391 unsigned int gt_ilimit_min; 392 unsigned int gt_demote_secs; /* Cache retention for unheld glock */ 393 unsigned int gt_incore_log_blocks; 394 unsigned int gt_log_flush_secs; 395 unsigned int gt_jindex_refresh_secs; /* Check for new journal index */ 396 397 unsigned int gt_scand_secs; 398 unsigned int gt_recoverd_secs; 399 unsigned int gt_logd_secs; 400 unsigned int gt_quotad_secs; 401 402 unsigned int gt_quota_simul_sync; /* Max quotavals to sync at once */ 403 unsigned int gt_quota_warn_period; /* Secs between quota warn msgs */ 404 unsigned int gt_quota_scale_num; /* Numerator */ 405 unsigned int gt_quota_scale_den; /* Denominator */ 406 unsigned int gt_quota_cache_secs; 407 unsigned int gt_quota_quantum; /* Secs between syncs to quota file */ 408 unsigned int gt_atime_quantum; /* Min secs between atime updates */ 409 unsigned int gt_new_files_jdata; 410 unsigned int gt_new_files_directio; 411 unsigned int gt_max_readahead; /* Max bytes to read-ahead from disk */ 412 unsigned int gt_lockdump_size; 413 unsigned int gt_stall_secs; /* Detects trouble! */ 414 unsigned int gt_complain_secs; 415 unsigned int gt_reclaim_limit; /* Max num of glocks in reclaim list */ 416 unsigned int gt_statfs_quantum; 417 unsigned int gt_statfs_slow; 418 }; 419 420 enum { 421 SDF_JOURNAL_CHECKED = 0, 422 SDF_JOURNAL_LIVE = 1, 423 SDF_SHUTDOWN = 2, 424 SDF_NOATIME = 3, 425 }; 426 427 #define GFS2_FSNAME_LEN 256 428 429 struct gfs2_sbd { 430 struct super_block *sd_vfs; 431 struct super_block *sd_vfs_meta; 432 struct kobject sd_kobj; 433 unsigned long sd_flags; /* SDF_... */ 434 struct gfs2_sb_host sd_sb; 435 436 /* Constants computed on mount */ 437 438 u32 sd_fsb2bb; 439 u32 sd_fsb2bb_shift; 440 u32 sd_diptrs; /* Number of pointers in a dinode */ 441 u32 sd_inptrs; /* Number of pointers in a indirect block */ 442 u32 sd_jbsize; /* Size of a journaled data block */ 443 u32 sd_hash_bsize; /* sizeof(exhash block) */ 444 u32 sd_hash_bsize_shift; 445 u32 sd_hash_ptrs; /* Number of pointers in a hash block */ 446 u32 sd_qc_per_block; 447 u32 sd_max_dirres; /* Max blocks needed to add a directory entry */ 448 u32 sd_max_height; /* Max height of a file's metadata tree */ 449 u64 sd_heightsize[GFS2_MAX_META_HEIGHT]; 450 u32 sd_max_jheight; /* Max height of journaled file's meta tree */ 451 u64 sd_jheightsize[GFS2_MAX_META_HEIGHT]; 452 453 struct gfs2_args sd_args; /* Mount arguments */ 454 struct gfs2_tune sd_tune; /* Filesystem tuning structure */ 455 456 /* Lock Stuff */ 457 458 struct lm_lockstruct sd_lockstruct; 459 struct list_head sd_reclaim_list; 460 spinlock_t sd_reclaim_lock; 461 wait_queue_head_t sd_reclaim_wq; 462 atomic_t sd_reclaim_count; 463 struct gfs2_holder sd_live_gh; 464 struct gfs2_glock *sd_rename_gl; 465 struct gfs2_glock *sd_trans_gl; 466 467 /* Inode Stuff */ 468 469 struct inode *sd_master_dir; 470 struct inode *sd_jindex; 471 struct inode *sd_inum_inode; 472 struct inode *sd_statfs_inode; 473 struct inode *sd_ir_inode; 474 struct inode *sd_sc_inode; 475 struct inode *sd_qc_inode; 476 struct inode *sd_rindex; 477 struct inode *sd_quota_inode; 478 479 /* Inum stuff */ 480 481 struct mutex sd_inum_mutex; 482 483 /* StatFS stuff */ 484 485 spinlock_t sd_statfs_spin; 486 struct mutex sd_statfs_mutex; 487 struct gfs2_statfs_change_host sd_statfs_master; 488 struct gfs2_statfs_change_host sd_statfs_local; 489 unsigned long sd_statfs_sync_time; 490 491 /* Resource group stuff */ 492 493 u64 sd_rindex_vn; 494 spinlock_t sd_rindex_spin; 495 struct mutex sd_rindex_mutex; 496 struct list_head sd_rindex_list; 497 struct list_head sd_rindex_mru_list; 498 struct list_head sd_rindex_recent_list; 499 struct gfs2_rgrpd *sd_rindex_forward; 500 unsigned int sd_rgrps; 501 502 /* Journal index stuff */ 503 504 struct list_head sd_jindex_list; 505 spinlock_t sd_jindex_spin; 506 struct mutex sd_jindex_mutex; 507 unsigned int sd_journals; 508 unsigned long sd_jindex_refresh_time; 509 510 struct gfs2_jdesc *sd_jdesc; 511 struct gfs2_holder sd_journal_gh; 512 struct gfs2_holder sd_jinode_gh; 513 514 struct gfs2_holder sd_ir_gh; 515 struct gfs2_holder sd_sc_gh; 516 struct gfs2_holder sd_qc_gh; 517 518 /* Daemon stuff */ 519 520 struct task_struct *sd_scand_process; 521 struct task_struct *sd_recoverd_process; 522 struct task_struct *sd_logd_process; 523 struct task_struct *sd_quotad_process; 524 struct task_struct *sd_glockd_process[GFS2_GLOCKD_MAX]; 525 unsigned int sd_glockd_num; 526 527 /* Quota stuff */ 528 529 struct list_head sd_quota_list; 530 atomic_t sd_quota_count; 531 spinlock_t sd_quota_spin; 532 struct mutex sd_quota_mutex; 533 534 unsigned int sd_quota_slots; 535 unsigned int sd_quota_chunks; 536 unsigned char **sd_quota_bitmap; 537 538 u64 sd_quota_sync_gen; 539 unsigned long sd_quota_sync_time; 540 541 /* Log stuff */ 542 543 spinlock_t sd_log_lock; 544 545 unsigned int sd_log_blks_reserved; 546 unsigned int sd_log_commited_buf; 547 unsigned int sd_log_commited_revoke; 548 549 unsigned int sd_log_num_gl; 550 unsigned int sd_log_num_buf; 551 unsigned int sd_log_num_revoke; 552 unsigned int sd_log_num_rg; 553 unsigned int sd_log_num_databuf; 554 unsigned int sd_log_num_jdata; 555 unsigned int sd_log_num_hdrs; 556 557 struct list_head sd_log_le_gl; 558 struct list_head sd_log_le_buf; 559 struct list_head sd_log_le_revoke; 560 struct list_head sd_log_le_rg; 561 struct list_head sd_log_le_databuf; 562 563 unsigned int sd_log_blks_free; 564 struct mutex sd_log_reserve_mutex; 565 566 u64 sd_log_sequence; 567 unsigned int sd_log_head; 568 unsigned int sd_log_tail; 569 int sd_log_idle; 570 571 unsigned long sd_log_flush_time; 572 struct rw_semaphore sd_log_flush_lock; 573 struct list_head sd_log_flush_list; 574 575 unsigned int sd_log_flush_head; 576 u64 sd_log_flush_wrapped; 577 578 struct list_head sd_ail1_list; 579 struct list_head sd_ail2_list; 580 u64 sd_ail_sync_gen; 581 582 /* Replay stuff */ 583 584 struct list_head sd_revoke_list; 585 unsigned int sd_replay_tail; 586 587 unsigned int sd_found_blocks; 588 unsigned int sd_found_revokes; 589 unsigned int sd_replayed_blocks; 590 591 /* For quiescing the filesystem */ 592 593 struct gfs2_holder sd_freeze_gh; 594 struct mutex sd_freeze_lock; 595 unsigned int sd_freeze_count; 596 597 /* Counters */ 598 599 atomic_t sd_glock_count; 600 atomic_t sd_glock_held_count; 601 atomic_t sd_inode_count; 602 atomic_t sd_reclaimed; 603 604 char sd_fsname[GFS2_FSNAME_LEN]; 605 char sd_table_name[GFS2_FSNAME_LEN]; 606 char sd_proto_name[GFS2_FSNAME_LEN]; 607 608 /* Debugging crud */ 609 610 unsigned long sd_last_warning; 611 struct vfsmount *sd_gfs2mnt; 612 struct dentry *debugfs_dir; /* debugfs directory */ 613 struct dentry *debugfs_dentry_glocks; /* for debugfs */ 614 }; 615 616 #endif /* __INCORE_DOT_H__ */ 617 618