Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/makefs/ffs/mkfs.c
Show First 20 Lines • Show All 142 Lines • ▼ Show 20 Lines | ffs_mkfs(const char *fsys, const fsinfo_t *fsopts, time_t tstamp) | ||||
strlcpy(sblock.fs_volname, ffs_opts->label, sizeof(sblock.fs_volname)); | strlcpy(sblock.fs_volname, ffs_opts->label, sizeof(sblock.fs_volname)); | ||||
if (Oflag == 0) { | if (Oflag == 0) { | ||||
sblock.fs_old_inodefmt = FS_42INODEFMT; | sblock.fs_old_inodefmt = FS_42INODEFMT; | ||||
sblock.fs_maxsymlinklen = 0; | sblock.fs_maxsymlinklen = 0; | ||||
sblock.fs_old_flags = 0; | sblock.fs_old_flags = 0; | ||||
} else { | } else { | ||||
sblock.fs_old_inodefmt = FS_44INODEFMT; | sblock.fs_old_inodefmt = FS_44INODEFMT; | ||||
sblock.fs_maxsymlinklen = (Oflag == 1 ? MAXSYMLINKLEN_UFS1 : | sblock.fs_maxsymlinklen = (Oflag == 1 ? UFS1_MAXSYMLINKLEN : | ||||
MAXSYMLINKLEN_UFS2); | UFS2_MAXSYMLINKLEN); | ||||
sblock.fs_old_flags = FS_FLAGS_UPDATED; | sblock.fs_old_flags = FS_FLAGS_UPDATED; | ||||
sblock.fs_flags = 0; | sblock.fs_flags = 0; | ||||
} | } | ||||
/* | /* | ||||
* Validate the given file system size. | * Validate the given file system size. | ||||
* Verify that its last block can actually be accessed. | * Verify that its last block can actually be accessed. | ||||
* Convert to file system fragment sized units. | * Convert to file system fragment sized units. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 90 Lines • ▼ Show 20 Lines | ffs_mkfs(const char *fsys, const fsinfo_t *fsopts, time_t tstamp) | ||||
sblock.fs_size = sblock.fs_providersize = fssize = | sblock.fs_size = sblock.fs_providersize = fssize = | ||||
dbtofsb(&sblock, fssize); | dbtofsb(&sblock, fssize); | ||||
if (Oflag <= 1) { | if (Oflag <= 1) { | ||||
sblock.fs_magic = FS_UFS1_MAGIC; | sblock.fs_magic = FS_UFS1_MAGIC; | ||||
sblock.fs_sblockloc = SBLOCK_UFS1; | sblock.fs_sblockloc = SBLOCK_UFS1; | ||||
sblock.fs_nindir = sblock.fs_bsize / sizeof(ufs1_daddr_t); | sblock.fs_nindir = sblock.fs_bsize / sizeof(ufs1_daddr_t); | ||||
sblock.fs_inopb = sblock.fs_bsize / sizeof(struct ufs1_dinode); | sblock.fs_inopb = sblock.fs_bsize / sizeof(struct ufs1_dinode); | ||||
sblock.fs_maxsymlinklen = ((NDADDR + NIADDR) * | sblock.fs_maxsymlinklen = ((UFS_NDADDR + UFS_NIADDR) * | ||||
sizeof (ufs1_daddr_t)); | sizeof (ufs1_daddr_t)); | ||||
sblock.fs_old_inodefmt = FS_44INODEFMT; | sblock.fs_old_inodefmt = FS_44INODEFMT; | ||||
sblock.fs_old_cgoffset = 0; | sblock.fs_old_cgoffset = 0; | ||||
sblock.fs_old_cgmask = 0xffffffff; | sblock.fs_old_cgmask = 0xffffffff; | ||||
sblock.fs_old_size = sblock.fs_size; | sblock.fs_old_size = sblock.fs_size; | ||||
sblock.fs_old_rotdelay = 0; | sblock.fs_old_rotdelay = 0; | ||||
sblock.fs_old_rps = 60; | sblock.fs_old_rps = 60; | ||||
sblock.fs_old_nspf = sblock.fs_fsize / sectorsize; | sblock.fs_old_nspf = sblock.fs_fsize / sectorsize; | ||||
sblock.fs_old_cpg = 1; | sblock.fs_old_cpg = 1; | ||||
sblock.fs_old_interleave = 1; | sblock.fs_old_interleave = 1; | ||||
sblock.fs_old_trackskew = 0; | sblock.fs_old_trackskew = 0; | ||||
sblock.fs_old_cpc = 0; | sblock.fs_old_cpc = 0; | ||||
sblock.fs_old_postblformat = 1; | sblock.fs_old_postblformat = 1; | ||||
sblock.fs_old_nrpos = 1; | sblock.fs_old_nrpos = 1; | ||||
} else { | } else { | ||||
sblock.fs_magic = FS_UFS2_MAGIC; | sblock.fs_magic = FS_UFS2_MAGIC; | ||||
sblock.fs_sblockloc = SBLOCK_UFS2; | sblock.fs_sblockloc = SBLOCK_UFS2; | ||||
sblock.fs_nindir = sblock.fs_bsize / sizeof(ufs2_daddr_t); | sblock.fs_nindir = sblock.fs_bsize / sizeof(ufs2_daddr_t); | ||||
sblock.fs_inopb = sblock.fs_bsize / sizeof(struct ufs2_dinode); | sblock.fs_inopb = sblock.fs_bsize / sizeof(struct ufs2_dinode); | ||||
sblock.fs_maxsymlinklen = ((NDADDR + NIADDR) * | sblock.fs_maxsymlinklen = ((UFS_NDADDR + UFS_NIADDR) * | ||||
sizeof (ufs2_daddr_t)); | sizeof (ufs2_daddr_t)); | ||||
} | } | ||||
sblock.fs_sblkno = | sblock.fs_sblkno = | ||||
roundup(howmany(sblock.fs_sblockloc + SBLOCKSIZE, sblock.fs_fsize), | roundup(howmany(sblock.fs_sblockloc + SBLOCKSIZE, sblock.fs_fsize), | ||||
sblock.fs_frag); | sblock.fs_frag); | ||||
sblock.fs_cblkno = (daddr_t)(sblock.fs_sblkno + | sblock.fs_cblkno = (daddr_t)(sblock.fs_sblkno + | ||||
roundup(howmany(SBLOCKSIZE, sblock.fs_fsize), sblock.fs_frag)); | roundup(howmany(SBLOCKSIZE, sblock.fs_fsize), sblock.fs_frag)); | ||||
sblock.fs_iblkno = sblock.fs_cblkno + sblock.fs_frag; | sblock.fs_iblkno = sblock.fs_cblkno + sblock.fs_frag; | ||||
sblock.fs_maxfilesize = sblock.fs_bsize * NDADDR - 1; | sblock.fs_maxfilesize = sblock.fs_bsize * UFS_NDADDR - 1; | ||||
for (sizepb = sblock.fs_bsize, i = 0; i < NIADDR; i++) { | for (sizepb = sblock.fs_bsize, i = 0; i < UFS_NIADDR; i++) { | ||||
sizepb *= NINDIR(&sblock); | sizepb *= NINDIR(&sblock); | ||||
sblock.fs_maxfilesize += sizepb; | sblock.fs_maxfilesize += sizepb; | ||||
} | } | ||||
/* | /* | ||||
* Calculate the number of blocks to put into each cylinder group. | * Calculate the number of blocks to put into each cylinder group. | ||||
* | * | ||||
* This algorithm selects the number of blocks per cylinder | * This algorithm selects the number of blocks per cylinder | ||||
▲ Show 20 Lines • Show All 143 Lines • ▼ Show 20 Lines | sblock.fs_dsize = sblock.fs_size - sblock.fs_sblkno - | ||||
sblock.fs_ncg * (sblock.fs_dblkno - sblock.fs_sblkno); | sblock.fs_ncg * (sblock.fs_dblkno - sblock.fs_sblkno); | ||||
sblock.fs_cstotal.cs_nbfree = | sblock.fs_cstotal.cs_nbfree = | ||||
fragstoblks(&sblock, sblock.fs_dsize) - | fragstoblks(&sblock, sblock.fs_dsize) - | ||||
howmany(csfrags, sblock.fs_frag); | howmany(csfrags, sblock.fs_frag); | ||||
sblock.fs_cstotal.cs_nffree = | sblock.fs_cstotal.cs_nffree = | ||||
fragnum(&sblock, sblock.fs_size) + | fragnum(&sblock, sblock.fs_size) + | ||||
(fragnum(&sblock, csfrags) > 0 ? | (fragnum(&sblock, csfrags) > 0 ? | ||||
sblock.fs_frag - fragnum(&sblock, csfrags) : 0); | sblock.fs_frag - fragnum(&sblock, csfrags) : 0); | ||||
sblock.fs_cstotal.cs_nifree = sblock.fs_ncg * sblock.fs_ipg - ROOTINO; | sblock.fs_cstotal.cs_nifree = sblock.fs_ncg * sblock.fs_ipg - | ||||
UFS_ROOTINO; | |||||
sblock.fs_cstotal.cs_ndir = 0; | sblock.fs_cstotal.cs_ndir = 0; | ||||
sblock.fs_dsize -= csfrags; | sblock.fs_dsize -= csfrags; | ||||
sblock.fs_time = tstamp; | sblock.fs_time = tstamp; | ||||
if (Oflag <= 1) { | if (Oflag <= 1) { | ||||
sblock.fs_old_time = tstamp; | sblock.fs_old_time = tstamp; | ||||
sblock.fs_old_dsize = sblock.fs_dsize; | sblock.fs_old_dsize = sblock.fs_dsize; | ||||
sblock.fs_old_csaddr = sblock.fs_csaddr; | sblock.fs_old_csaddr = sblock.fs_csaddr; | ||||
sblock.fs_old_cstotal.cs_ndir = sblock.fs_cstotal.cs_ndir; | sblock.fs_old_cstotal.cs_ndir = sblock.fs_cstotal.cs_ndir; | ||||
▲ Show 20 Lines • Show All 190 Lines • ▼ Show 20 Lines | acg.cg_nextfreeoff = acg.cg_clusteroff + | ||||
howmany(fragstoblks(&sblock, sblock.fs_fpg), CHAR_BIT); | howmany(fragstoblks(&sblock, sblock.fs_fpg), CHAR_BIT); | ||||
} | } | ||||
if (acg.cg_nextfreeoff > sblock.fs_cgsize) { | if (acg.cg_nextfreeoff > sblock.fs_cgsize) { | ||||
printf("Panic: cylinder group too big\n"); | printf("Panic: cylinder group too big\n"); | ||||
exit(37); | exit(37); | ||||
} | } | ||||
acg.cg_cs.cs_nifree += sblock.fs_ipg; | acg.cg_cs.cs_nifree += sblock.fs_ipg; | ||||
if (cylno == 0) | if (cylno == 0) | ||||
for (i = 0; i < ROOTINO; i++) { | for (i = 0; i < UFS_ROOTINO; i++) { | ||||
setbit(cg_inosused_swap(&acg, 0), i); | setbit(cg_inosused_swap(&acg, 0), i); | ||||
acg.cg_cs.cs_nifree--; | acg.cg_cs.cs_nifree--; | ||||
} | } | ||||
if (cylno > 0) { | if (cylno > 0) { | ||||
/* | /* | ||||
* In cylno 0, beginning space is reserved | * In cylno 0, beginning space is reserved | ||||
* for boot and super blocks. | * for boot and super blocks. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 173 Lines • Show Last 20 Lines |