Lines Matching refs:fs
1 /* $NetBSD: fs.h,v 1.73 2024/12/13 22:32:45 riastradh Exp $ */
31 * @(#)fs.h 8.13 (Berkeley) 3/21/95
53 * For file system fs, the offsets of the various blocks of interest
55 * [fs->fs_sblkno] Super-block
56 * [fs->fs_cblkno] Cylinder group block
57 * [fs->fs_iblkno] Inode blocks
58 * [fs->fs_dblkno] Data blocks
59 * The beginning of cylinder group cg in fs, is given by
60 * the ``cgbase(fs, cg)'' macro.
126 * information in the inode, using the ``ffs_blksize(fs, ip, lbn)'' macro.
256 struct fs {
266 int32_t fs_old_size; /* number of blocks in fs */
267 int32_t fs_old_dsize; /* number of data blocks in fs */
269 int32_t fs_bsize; /* size of basic blocks in fs */
270 int32_t fs_fsize; /* size of frag blocks in fs */
271 int32_t fs_frag; /* number of frags in a block in fs */
330 u_char *fs_active; /* used by snapshots to track fs */
347 int64_t fs_size; /* number of blocks in fs */
348 int64_t fs_dsize; /* number of data blocks in fs */
387 ((fs_)->fs_old_postbloff == offsetof(struct fs, fs_old_postbl_start))) \
391 #define old_fs_rotbl(fs) \
392 (((fs)->fs_old_postblformat == FS_42POSTBLFMT) \
393 ? ((uint8_t *)(&(fs)->fs_magic+1)) \
394 : ((uint8_t *)((uint8_t *)(fs) + (fs)->fs_old_rotbloff)))
460 #define ACTIVECG_SET(fs, cg) \
462 if ((fs)->fs_active != NULL) \
463 setbit((fs)->fs_active, (cg)); \
465 #define ACTIVECG_CLR(fs, cg) \
467 if ((fs)->fs_active != NULL) \
468 clrbit((fs)->fs_active, (cg)); \
470 #define ACTIVECG_ISSET(fs, cg) \
471 ((fs)->fs_active != NULL && isset((fs)->fs_active, (cg)))
479 #define CGSIZE_IF(fs, ipg, fpg) \
481 /* old btotoff */ (fs)->fs_old_cpg * sizeof(int32_t) + \
482 /* old boff */ (fs)->fs_old_cpg * sizeof(u_int16_t) + \
485 /* if present */ ((fs)->fs_contigsumsize <= 0 ? 0 : \
486 /* cluster sum */ (fs)->fs_contigsumsize * sizeof(int32_t) + \
487 /* cluster map */ howmany(ffs_fragstoblks(fs, (fpg)), NBBY)))
489 #define CGSIZE(fs) CGSIZE_IF((fs), (fs)->fs_ipg, (fs)->fs_fpg)
500 #define fs_cs(fs, indx) fs_csp[indx]
567 #define old_cg_blks_old(fs, cgp, cylno, ns) \
573 #define old_cg_blks_new(fs, cgp, cylno, ns) \
575 ufs_rw32((cgp)->cg_old_boff, (ns))) + (cylno) * (fs)->fs_old_nrpos)
580 #define old_cg_blks(fs, cgp, cylno, ns) \
582 old_cg_blks_old(fs, cgp, cylno, ns) : old_cg_blks_new(fs, cgp, cylno, ns))
622 #define FFS_FSBTODB(fs, b) ((b) << ((fs)->fs_fshift - DEV_BSHIFT))
623 #define FFS_DBTOFSB(fs, b) ((b) >> ((fs)->fs_fshift - DEV_BSHIFT))
625 #define FFS_FSBTODB(fs, b) ((b) << (fs)->fs_fsbtodb)
626 #define FFS_DBTOFSB(fs, b) ((b) >> (fs)->fs_fsbtodb)
633 #define cgbase(fs, c) (((daddr_t)(fs)->fs_fpg) * (c))
634 #define cgstart_ufs1(fs, c) \
635 (cgbase(fs, c) + (fs)->fs_old_cgoffset * ((c) & ~((fs)->fs_old_cgmask)))
636 #define cgstart_ufs2(fs, c) cgbase((fs), (c))
637 #define cgstart(fs, c) ((fs)->fs_magic == FS_UFS2_MAGIC \
638 ? cgstart_ufs2((fs), (c)) : cgstart_ufs1((fs), (c)))
639 #define cgdmin(fs, c) (cgstart(fs, c) + (fs)->fs_dblkno) /* 1st data */
640 #define cgimin(fs, c) (cgstart(fs, c) + (fs)->fs_iblkno) /* inode blk */
641 #define cgsblock(fs, c) (cgstart(fs, c) + (fs)->fs_sblkno) /* super blk */
642 #define cgtod(fs, c) (cgstart(fs, c) + (fs)->fs_cblkno) /* cg block */
650 #define ino_to_cg(fs, x) (((ino_t)(x)) / (fs)->fs_ipg)
651 #define ino_to_fsba(fs, x) \
652 ((daddr_t)(cgimin(fs, ino_to_cg(fs, (ino_t)(x))) + \
653 (ffs_blkstofrags((fs), ((((ino_t)(x)) % (fs)->fs_ipg) / FFS_INOPB(fs))))))
654 #define ino_to_fsbo(fs, x) (((ino_t)(x)) % FFS_INOPB(fs))
660 #define dtog(fs, d) ((d) / (fs)->fs_fpg)
661 #define dtogd(fs, d) ((d) % (fs)->fs_fpg)
667 #define blkmap(fs, map, loc) \
668 (((map)[(loc) / NBBY] >> ((loc) % NBBY)) & (0xff >> (NBBY - (fs)->fs_frag)))
669 #define old_cbtocylno(fs, bno) \
670 (FFS_FSBTODB(fs, bno) / (fs)->fs_old_spc)
671 #define old_cbtorpos(fs, bno) \
672 ((fs)->fs_old_nrpos <= 1 ? 0 : \
673 (FFS_FSBTODB(fs, bno) % (fs)->fs_old_spc / (fs)->fs_old_nsect * (fs)->fs_old_trackskew + \
674 FFS_FSBTODB(fs, bno) % (fs)->fs_old_spc % (fs)->fs_old_nsect * (fs)->fs_old_interleave) % \
675 (fs)->fs_old_nsect * (fs)->fs_old_nrpos / (fs)->fs_old_npsect)
682 #define ffs_blkoff(fs, loc) /* calculates (loc % fs->fs_bsize) */ \
683 ((loc) & (fs)->fs_qbmask)
684 #define ffs_fragoff(fs, loc) /* calculates (loc % fs->fs_fsize) */ \
685 ((loc) & (fs)->fs_qfmask)
686 #define ffs_lfragtosize(fs, frag) /* calculates ((off_t)frag * fs->fs_fsize) */ \
687 (((off_t)(frag)) << (fs)->fs_fshift)
688 #define ffs_lblktosize(fs, blk) /* calculates ((off_t)blk * fs->fs_bsize) */ \
689 ((uint64_t)(((off_t)(blk)) << (fs)->fs_bshift))
690 #define ffs_lblkno(fs, loc) /* calculates (loc / fs->fs_bsize) */ \
691 ((loc) >> (fs)->fs_bshift)
692 #define ffs_numfrags(fs, loc) /* calculates (loc / fs->fs_fsize) */ \
693 ((loc) >> (fs)->fs_fshift)
694 #define ffs_blkroundup(fs, size) /* calculates roundup(size, fs->fs_bsize) */ \
695 (((size) + (fs)->fs_qbmask) & (fs)->fs_bmask)
696 #define ffs_fragroundup(fs, size) /* calculates roundup(size, fs->fs_fsize) */ \
697 (((size) + (fs)->fs_qfmask) & (fs)->fs_fmask)
698 #define ffs_fragstoblks(fs, frags) /* calculates (frags / fs->fs_frag) */ \
699 ((frags) >> (fs)->fs_fragshift)
700 #define ffs_blkstofrags(fs, blks) /* calculates (blks * fs->fs_frag) */ \
701 ((blks) << (fs)->fs_fragshift)
702 #define ffs_fragnum(fs, fsb) /* calculates (fsb % fs->fs_frag) */ \
703 ((fsb) & ((fs)->fs_frag - 1))
704 #define ffs_blknum(fs, fsb) /* calculates rounddown(fsb, fs->fs_frag) */ \
705 ((fsb) &~ ((fs)->fs_frag - 1))
706 #define ffs_getdb(fs, ip, lb) \
707 ((fs)->fs_magic == FS_UFS2_MAGIC ? \
708 (daddr_t)ufs_rw64((ip)->i_ffs2_db[lb], UFS_FSNEEDSWAP(fs)) : \
709 (daddr_t)ufs_rw32((ip)->i_ffs1_db[lb], UFS_FSNEEDSWAP(fs)))
710 #define ffs_getib(fs, ip, lb) \
711 ((fs)->fs_magic == FS_UFS2_MAGIC ? \
712 (daddr_t)ufs_rw64((ip)->i_ffs2_ib[lb], UFS_FSNEEDSWAP(fs)) : \
713 (daddr_t)ufs_rw32((ip)->i_ffs1_ib[lb], UFS_FSNEEDSWAP(fs)))
719 #define freespace(fs, percentreserved) \
720 (ffs_blkstofrags((fs), (fs)->fs_cstotal.cs_nbfree) + \
721 (fs)->fs_cstotal.cs_nffree - \
722 (((off_t)((fs)->fs_dsize)) * (percentreserved) / 100))
727 #define ffs_blksize(fs, ip, lbn) \
728 (((lbn) >= UFS_NDADDR || (ip)->i_size >= ffs_lblktosize(fs, (lbn) + 1)) \
729 ? (fs)->fs_bsize \
730 : ((int32_t)ffs_fragroundup(fs, ffs_blkoff(fs, (ip)->i_size))))
732 #define ffs_sblksize(fs, size, lbn) \
733 (((lbn) >= UFS_NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \
734 ? (fs)->fs_bsize \
735 : ((int32_t)ffs_fragroundup(fs, ffs_blkoff(fs, (uint64_t)(size)))))
741 #define FFS_INOPB(fs) ((fs)->fs_inopb)
742 #define FFS_INOPF(fs) ((fs)->fs_inopb >> (fs)->fs_fragshift)
747 #define FFS_NINDIR(fs) ((fs)->fs_nindir)