34 #ifndef _UFS_FFS_FS_H_ 35 #define _UFS_FFS_FS_H_ 88 #define BBOFF ((off_t)(0)) 89 #define BBLOCK ((daddr_t)(0)) 91 #define SBLOCK_FLOPPY 0 92 #define SBLOCK_UFS1 8192 93 #define SBLOCK_UFS2 65536 94 #define SBLOCK_PIGGY 262144 95 #define SBLOCKSIZE 8192 101 #define SBLOCKSEARCH \ 102 { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 } 139 #define MINBSIZE 4096 146 #define MAXMNTLEN 468 168 #define NOCSPTRS ((128 / sizeof(void *)) - 4) 176 #define FS_MAXCONTIG 16 196 #define DEFAULTOPT FS_OPTTIME 207 #define AVFILESIZ 16384 344 #define fs_old_postbloff fs_spare5[0] 345 #define fs_old_rotbloff fs_spare5[1] 346 #define fs_old_postbl_start fs_maxbsize 347 #define fs_old_headswitch fs_id[0] 348 #define fs_old_trkseek fs_id[1] 349 #define fs_old_csmask fs_spare1[0] 350 #define fs_old_csshift fs_spare1[1] 352 #define FS_42POSTBLFMT -1 353 #define FS_DYNAMICPOSTBLFMT 1 355 #define old_fs_postbl(fs_, cylno, opostblsave) \ 356 ((((fs_)->fs_old_postblformat == FS_42POSTBLFMT) || \ 357 ((fs_)->fs_old_postbloff == offsetof(struct fs, fs_old_postbl_start))) \ 358 ? ((int16_t *)(opostblsave) + (cylno) * (fs_)->fs_old_nrpos) \ 359 : ((int16_t *)((uint8_t *)(fs_) + \ 360 (fs_)->fs_old_postbloff) + (cylno) * (fs_)->fs_old_nrpos)) 361 #define old_fs_rotbl(fs) \ 362 (((fs)->fs_old_postblformat == FS_42POSTBLFMT) \ 363 ? ((uint8_t *)(&(fs)->fs_magic+1)) \ 364 : ((uint8_t *)((uint8_t *)(fs) + (fs)->fs_old_rotbloff))) 369 #define FS_UFS1_MAGIC 0x011954 370 #define FS_UFS2_MAGIC 0x19540119 371 #define FS_UFS1_MAGIC_SWAPPED 0x54190100 372 #define FS_UFS2_MAGIC_SWAPPED 0x19015419 373 #define FS_OKAY 0x7c269d38 374 #define FS_42INODEFMT -1 375 #define FS_44INODEFMT 2 380 #define FS_ISCLEAN 0x01 381 #define FS_WASCLEAN 0x02 387 #define FS_OPTSPACE 1 392 #define FS_UNCLEAN 0x01 393 #define FS_DOSOFTDEP 0x02 394 #define FS_NEEDSFSCK 0x04 395 #define FS_INDEXDIRS 0x08 397 #define FS_MULTILABEL 0x20 398 #define FS_FLAGS_UPDATED 0x80 404 #define FS_SWAPPED 0x80000000 405 #define FS_INTERNAL 0x80000000 413 #define CGSIZE_IF(fs, ipg, fpg) \ 414 (sizeof(struct cg) + sizeof(int32_t) + \ 415 (fs)->fs_old_cpg * sizeof(int32_t) + \ 416 (fs)->fs_old_cpg * sizeof(u_int16_t) + \ 417 howmany((ipg), NBBY) + \ 418 howmany((fpg), NBBY) +\ 419 ((fs)->fs_contigsumsize <= 0 ? 0 : \ 420 (fs)->fs_contigsumsize * sizeof(int32_t) + \ 421 howmany(fragstoblks(fs, (fpg)), NBBY))) 423 #define CGSIZE(fs) CGSIZE_IF((fs), (fs)->fs_ipg, (fs)->fs_fpg) 434 #define fs_cs(fs, indx) fs_csp[indx] 439 #define CG_MAGIC 0x090255 499 #define old_cg_blktot_old(cgp, ns) \ 500 (((struct ocg *)(cgp))->cg_btot) 501 #define old_cg_blks_old(fs, cgp, cylno, ns) \ 502 (((struct ocg *)(cgp))->cg_b[cylno]) 504 #define old_cg_blktot_new(cgp, ns) \ 505 ((int32_t *)((u_int8_t *)(cgp) + \ 506 ufs_rw32((cgp)->cg_old_btotoff, (ns)))) 507 #define old_cg_blks_new(fs, cgp, cylno, ns) \ 508 ((int16_t *)((u_int8_t *)(cgp) + \ 509 ufs_rw32((cgp)->cg_old_boff, (ns))) + (cylno) * (fs)->fs_old_nrpos) 511 #define old_cg_blktot(cgp, ns) \ 512 ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \ 513 old_cg_blktot_old(cgp, ns) : old_cg_blktot_new(cgp, ns)) 514 #define old_cg_blks(fs, cgp, cylno, ns) \ 515 ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \ 516 old_cg_blks_old(fs, cgp, cylno, ns) : old_cg_blks_new(fs, cgp, cylno, ns)) 518 #define cg_inosused_new(cgp, ns) \ 519 ((u_int8_t *)((u_int8_t *)(cgp) + \ 520 ufs_rw32((cgp)->cg_iusedoff, (ns)))) 521 #define cg_blksfree_new(cgp, ns) \ 522 ((u_int8_t *)((u_int8_t *)(cgp) + \ 523 ufs_rw32((cgp)->cg_freeoff, (ns)))) 524 #define cg_chkmagic_new(cgp, ns) \ 525 (ufs_rw32((cgp)->cg_magic, (ns)) == CG_MAGIC) 527 #define cg_inosused_old(cgp, ns) \ 528 (((struct ocg *)(cgp))->cg_iused) 529 #define cg_blksfree_old(cgp, ns) \ 530 (((struct ocg *)(cgp))->cg_free) 531 #define cg_chkmagic_old(cgp, ns) \ 532 (ufs_rw32(((struct ocg *)(cgp))->cg_magic, (ns)) == CG_MAGIC) 534 #define cg_inosused(cgp, ns) \ 535 ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \ 536 cg_inosused_old(cgp, ns) : cg_inosused_new(cgp, ns)) 537 #define cg_blksfree(cgp, ns) \ 538 ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \ 539 cg_blksfree_old(cgp, ns) : cg_blksfree_new(cgp, ns)) 540 #define cg_chkmagic(cgp, ns) \ 541 (cg_chkmagic_new(cgp, ns) || cg_chkmagic_old(cgp, ns)) 543 #define cg_clustersfree(cgp, ns) \ 544 ((u_int8_t *)((u_int8_t *)(cgp) + \ 545 ufs_rw32((cgp)->cg_clusteroff, (ns)))) 546 #define cg_clustersum(cgp, ns) \ 547 ((int32_t *)((u_int8_t *)(cgp) + \ 548 ufs_rw32((cgp)->cg_clustersumoff, (ns)))) 555 #define fsbtodb(fs, b) ((b) << (fs)->fs_fsbtodb) 556 #define dbtofsb(fs, b) ((b) >> (fs)->fs_fsbtodb) 562 #define cgbase(fs, c) (((daddr_t)(fs)->fs_fpg) * (c)) 563 #define cgstart_ufs1(fs, c) \ 564 (cgbase(fs, c) + (fs)->fs_old_cgoffset * ((c) & ~((fs)->fs_old_cgmask))) 565 #define cgstart_ufs2(fs, c) cgbase((fs), (c)) 566 #define cgstart(fs, c) ((fs)->fs_magic == FS_UFS2_MAGIC \ 567 ? cgstart_ufs2((fs), (c)) : cgstart_ufs1((fs), (c))) 568 #define cgdmin(fs, c) (cgstart(fs, c) + (fs)->fs_dblkno) 569 #define cgimin(fs, c) (cgstart(fs, c) + (fs)->fs_iblkno) 570 #define cgsblock(fs, c) (cgstart(fs, c) + (fs)->fs_sblkno) 571 #define cgtod(fs, c) (cgstart(fs, c) + (fs)->fs_cblkno) 579 #define ino_to_cg(fs, x) ((x) / (fs)->fs_ipg) 580 #define ino_to_fsba(fs, x) \ 581 ((daddr_t)(cgimin(fs, ino_to_cg(fs, x)) + \ 582 (blkstofrags((fs), (((x) % (fs)->fs_ipg) / INOPB(fs)))))) 583 #define ino_to_fsbo(fs, x) ((x) % INOPB(fs)) 589 #define dtog(fs, d) ((d) / (fs)->fs_fpg) 590 #define dtogd(fs, d) ((d) % (fs)->fs_fpg) 596 #define blkmap(fs, map, loc) \ 597 (((map)[(loc) / NBBY] >> ((loc) % NBBY)) & (0xff >> (NBBY - (fs)->fs_frag))) 598 #define old_cbtocylno(fs, bno) \ 599 (fsbtodb(fs, bno) / (fs)->fs_old_spc) 600 #define old_cbtorpos(fs, bno) \ 601 ((fs)->fs_old_nrpos <= 1 ? 0 : \ 602 (fsbtodb(fs, bno) % (fs)->fs_old_spc / (fs)->fs_old_nsect * (fs)->fs_old_trackskew + \ 603 fsbtodb(fs, bno) % (fs)->fs_old_spc % (fs)->fs_old_nsect * (fs)->fs_old_interleave) % \ 604 (fs)->fs_old_nsect * (fs)->fs_old_nrpos / (fs)->fs_old_npsect) 611 #define blkoff(fs, loc) \ 612 ((loc) & (fs)->fs_qbmask) 613 #define fragoff(fs, loc) \ 614 ((loc) & (fs)->fs_qfmask) 615 #define lfragtosize(fs, frag) \ 616 (((off_t)(frag)) << (fs)->fs_fshift) 617 #define lblktosize(fs, blk) \ 618 (((off_t)(blk)) << (fs)->fs_bshift) 619 #define lblkno(fs, loc) \ 620 ((loc) >> (fs)->fs_bshift) 621 #define numfrags(fs, loc) \ 622 ((loc) >> (fs)->fs_fshift) 623 #define blkroundup(fs, size) \ 624 (((size) + (fs)->fs_qbmask) & (fs)->fs_bmask) 625 #define fragroundup(fs, size) \ 626 (((size) + (fs)->fs_qfmask) & (fs)->fs_fmask) 627 #define fragstoblks(fs, frags) \ 628 ((frags) >> (fs)->fs_fragshift) 629 #define blkstofrags(fs, blks) \ 630 ((blks) << (fs)->fs_fragshift) 631 #define fragnum(fs, fsb) \ 632 ((fsb) & ((fs)->fs_frag - 1)) 633 #define blknum(fs, fsb) \ 634 ((fsb) &~ ((fs)->fs_frag - 1)) 640 #define freespace(fs, percentreserved) \ 641 (blkstofrags((fs), (fs)->fs_cstotal.cs_nbfree) + \ 642 (fs)->fs_cstotal.cs_nffree - \ 643 (((off_t)((fs)->fs_dsize)) * (percentreserved) / 100)) 648 #define blksize(fs, ip, lbn) \ 649 (((lbn) >= NDADDR || (ip)->i_size >= lblktosize(fs, (lbn) + 1)) \ 651 : (fragroundup(fs, blkoff(fs, (ip)->i_size)))) 653 #define sblksize(fs, size, lbn) \ 654 (((lbn) >= NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \ 656 : (fragroundup(fs, blkoff(fs, (size))))) 662 #define INOPB(fs) ((fs)->fs_inopb) 663 #define INOPF(fs) ((fs)->fs_inopb >> (fs)->fs_fragshift) 668 #define NINDIR(fs) ((fs)->fs_nindir) 674 #define APPLEUFS_LABEL_MAGIC 0x4c41424c 675 #define APPLEUFS_LABEL_SIZE 1024 676 #define APPLEUFS_LABEL_OFFSET (BBSIZE - APPLEUFS_LABEL_SIZE) 677 #define APPLEUFS_LABEL_VERSION 1 678 #define APPLEUFS_MAX_LABEL_NAME 512 681 struct appleufslabel {
struct csum fs_old_cstotal
#define APPLEUFS_MAX_LABEL_NAME
int64_t fs_sparecon64[17]
u_char fs_fsmnt[MAXMNTLEN]
int32_t fs_sparecon32[26]
int32_t fs_old_interleave
struct csum_total fs_cstotal
int32_t cg_frsum[MAXFRAG]
int32_t fs_old_postblformat
int32_t fs_snapinum[FSMAXSNAP]
u_char fs_volname[MAXVOLLEN]