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