Go to the documentation of this file.
33 #ifndef _UFS_FFS_FS_H_
34 #define _UFS_FFS_FS_H_
37 #include <ufs/ufs/dinode.h>
71 #define SBLOCK_FLOPPY 0
72 #define SBLOCK_UFS1 8192
73 #define SBLOCK_UFS2 65536
74 #define SBLOCK_PIGGY 262144
75 #define SBLOCKSIZE 8192
76 #define SBLOCKSEARCH \
77 { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }
112 #define MINBSIZE 4096
119 #define MAXMNTLEN 468
142 #define NOCSPTRS ((128 / sizeof(void *)) - 4)
150 #define FS_MAXCONTIG 16
165 #define DEFAULTOPT FS_OPTTIME
176 #define AVFILESIZ 16384
200 #define BLK_NOCOPY ((ufs2_daddr_t)(1))
201 #define BLK_SNAP ((ufs2_daddr_t)(2))
206 #define FFS_ADJ_REFCNT 1
207 #define FFS_ADJ_BLKCNT 2
208 #define FFS_BLK_FREE 3
209 #define FFS_DIR_FREE 4
210 #define FFS_FILE_FREE 5
211 #define FFS_SET_FLAGS 6
212 #define FFS_ADJ_NDIR 7
213 #define FFS_ADJ_NBFREE 8
214 #define FFS_ADJ_NIFREE 9
215 #define FFS_ADJ_NFFREE 10
216 #define FFS_ADJ_NUMCLUSTERS 11
217 #define FFS_SET_CWD 12
218 #define FFS_SET_DOTDOT 13
219 #define FFS_UNLINK 14
220 #define FFS_SET_INODE 15
221 #define FFS_SET_BUFOUTPUT 16
227 #define FFS_CMD_VERSION 0x19790518
370 CTASSERT(
sizeof(
struct fs) == 1376);
376 #define FS_UFS1_MAGIC 0x011954
377 #define FS_UFS2_MAGIC 0x19540119
378 #define FS_BAD_MAGIC 0x19960408
379 #define FS_OKAY 0x7c269d38
380 #define FS_42INODEFMT -1
381 #define FS_44INODEFMT 2
387 #define FS_OPTSPACE 1
417 #define FS_UNCLEAN 0x0001
418 #define FS_DOSOFTDEP 0x0002
419 #define FS_NEEDSFSCK 0x0004
420 #define FS_SUJ 0x0008
421 #define FS_ACLS 0x0010
422 #define FS_MULTILABEL 0x0020
423 #define FS_GJOURNAL 0x0040
424 #define FS_FLAGS_UPDATED 0x0080
425 #define FS_NFS4ACLS 0x0100
426 #define FS_INDEXDIRS 0x0200
427 #define FS_TRIM 0x0400
432 #define ACTIVECGNUM(fs, cg) ((fs)->fs_active[(cg) / (NBBY * sizeof(int))])
433 #define ACTIVECGOFF(cg) (1 << ((cg) % (NBBY * sizeof(int))))
434 #define ACTIVESET(fs, cg) do { \
435 if ((fs)->fs_active) \
436 ACTIVECGNUM((fs), (cg)) |= ACTIVECGOFF((cg)); \
438 #define ACTIVECLEAR(fs, cg) do { \
439 if ((fs)->fs_active) \
440 ACTIVECGNUM((fs), (cg)) &= ~ACTIVECGOFF((cg)); \
450 (sizeof(struct cg) + sizeof(int32_t) + \
451 (fs)->fs_old_cpg * sizeof(int32_t) + \
452 (fs)->fs_old_cpg * sizeof(u_int16_t) + \
453 howmany((fs)->fs_ipg, NBBY) + \
454 howmany((fs)->fs_fpg, NBBY) +\
455 ((fs)->fs_contigsumsize <= 0 ? 0 : \
456 (fs)->fs_contigsumsize * sizeof(int32_t) + \
457 howmany(fragstoblks(fs, (fs)->fs_fpg), NBBY)))
467 #define fs_cs(fs, indx) fs_csp[indx]
472 #define CG_MAGIC 0x090255
507 #define cg_chkmagic(cgp) ((cgp)->cg_magic == CG_MAGIC)
508 #define cg_inosused(cgp) \
509 ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_iusedoff))
510 #define cg_blksfree(cgp) \
511 ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_freeoff))
512 #define cg_clustersfree(cgp) \
513 ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_clusteroff))
514 #define cg_clustersum(cgp) \
515 ((int32_t *)((uintptr_t)(cgp) + (cgp)->cg_clustersumoff))
521 #define fsbtodb(fs, b) ((daddr_t)(b) << (fs)->fs_fsbtodb)
522 #define dbtofsb(fs, b) ((b) >> (fs)->fs_fsbtodb)
528 #define cgbase(fs, c) (((ufs2_daddr_t)(fs)->fs_fpg) * (c))
529 #define cgdata(fs, c) (cgdmin(fs, c) + (fs)->fs_metaspace)
530 #define cgmeta(fs, c) (cgdmin(fs, c))
531 #define cgdmin(fs, c) (cgstart(fs, c) + (fs)->fs_dblkno)
532 #define cgimin(fs, c) (cgstart(fs, c) + (fs)->fs_iblkno)
533 #define cgsblock(fs, c) (cgstart(fs, c) + (fs)->fs_sblkno)
534 #define cgtod(fs, c) (cgstart(fs, c) + (fs)->fs_cblkno)
535 #define cgstart(fs, c) \
536 ((fs)->fs_magic == FS_UFS2_MAGIC ? cgbase(fs, c) : \
537 (cgbase(fs, c) + (fs)->fs_old_cgoffset * ((c) & ~((fs)->fs_old_cgmask))))
545 #define ino_to_cg(fs, x) (((ino_t)(x)) / (fs)->fs_ipg)
546 #define ino_to_fsba(fs, x) \
547 ((ufs2_daddr_t)(cgimin(fs, ino_to_cg(fs, (ino_t)(x))) + \
548 (blkstofrags((fs), ((((ino_t)(x)) % (fs)->fs_ipg) / INOPB(fs))))))
549 #define ino_to_fsbo(fs, x) (((ino_t)(x)) % INOPB(fs))
555 #define dtog(fs, d) ((d) / (fs)->fs_fpg)
556 #define dtogd(fs, d) ((d) % (fs)->fs_fpg)
562 #define blkmap(fs, map, loc) \
563 (((map)[(loc) / NBBY] >> ((loc) % NBBY)) & (0xff >> (NBBY - (fs)->fs_frag)))
570 #define blkoff(fs, loc) \
571 ((loc) & (fs)->fs_qbmask)
572 #define fragoff(fs, loc) \
573 ((loc) & (fs)->fs_qfmask)
574 #define lfragtosize(fs, frag) \
575 (((off_t)(frag)) << (fs)->fs_fshift)
576 #define lblktosize(fs, blk) \
577 (((off_t)(blk)) << (fs)->fs_bshift)
579 #define smalllblktosize(fs, blk) \
580 ((blk) << (fs)->fs_bshift)
581 #define lblkno(fs, loc) \
582 ((loc) >> (fs)->fs_bshift)
583 #define numfrags(fs, loc) \
584 ((loc) >> (fs)->fs_fshift)
585 #define blkroundup(fs, size) \
586 (((size) + (fs)->fs_qbmask) & (fs)->fs_bmask)
587 #define fragroundup(fs, size) \
588 (((size) + (fs)->fs_qfmask) & (fs)->fs_fmask)
589 #define fragstoblks(fs, frags) \
590 ((frags) >> (fs)->fs_fragshift)
591 #define blkstofrags(fs, blks) \
592 ((blks) << (fs)->fs_fragshift)
593 #define fragnum(fs, fsb) \
594 ((fsb) & ((fs)->fs_frag - 1))
595 #define blknum(fs, fsb) \
596 ((fsb) &~ ((fs)->fs_frag - 1))
602 #define freespace(fs, percentreserved) \
603 (blkstofrags((fs), (fs)->fs_cstotal.cs_nbfree) + \
604 (fs)->fs_cstotal.cs_nffree - \
605 (((off_t)((fs)->fs_dsize)) * (percentreserved) / 100))
610 #define blksize(fs, ip, lbn) \
611 (((lbn) >= NDADDR || (ip)->i_size >= smalllblktosize(fs, (lbn) + 1)) \
613 : (fragroundup(fs, blkoff(fs, (ip)->i_size))))
614 #define sblksize(fs, size, lbn) \
615 (((lbn) >= NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \
617 : (fragroundup(fs, blkoff(fs, (size)))))
622 #define NINDIR(fs) ((fs)->fs_nindir)
651 lbn_offset(
struct fs *
fs,
int level)
655 for (res = 1; level > 0; level--)
663 #define INOPB(fs) ((fs)->fs_inopb)
664 #define INOPF(fs) ((fs)->fs_inopb >> (fs)->fs_fragshift)
673 #define JOP_FREEBLK 4
680 #define SUJ_MIN (4 * 1024 * 1024)
681 #define SUJ_MAX (32 * 1024 * 1024)
682 #define SUJ_FILE ".sujournal"
775 #define UFSSUSPEND _IOW('U', 1, fsid_t)
776 #define UFSRESUME _IO('U', 2)
u_int32_t fs_pendinginodes
int32_t fs_old_interleave
struct csum_total fs_cstotal
int32_t fs_old_postblformat
struct jrefrec rec_jrefrec
struct jtrncrec rec_jtrncrec
int32_t fs_sparecon32[23]
u_int32_t cg_nclusterblks
int64_t fs_sparecon64[14]
u_int32_t cg_clustersumoff
struct csum fs_old_cstotal
struct jblkrec rec_jblkrec
void * fs_ocsp[((128/sizeof(void *)) - 4)]
struct jsegrec rec_jsegrec