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