Lines Matching +full:boot +full:- +full:blks

1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
79 * Verify an inode check-hash.
87 * Return success if unallocated or we are not doing inode check-hash. in ffs_verify_dinode_ckhash()
89 if (dip->di_mode == 0 || (fs->fs_metackhash & CK_INODE) == 0) in ffs_verify_dinode_ckhash()
93 * a check-hash value of zero when calculating the check-hash. in ffs_verify_dinode_ckhash()
95 save_ckhash = dip->di_ckhash; in ffs_verify_dinode_ckhash()
96 dip->di_ckhash = 0; in ffs_verify_dinode_ckhash()
98 dip->di_ckhash = save_ckhash; in ffs_verify_dinode_ckhash()
105 * Update an inode check-hash.
111 if (dip->di_mode == 0 || (fs->fs_metackhash & CK_INODE) == 0) in ffs_update_dinode_ckhash()
115 * a check-hash value of zero when calculating the new check-hash. in ffs_update_dinode_ckhash()
117 dip->di_ckhash = 0; in ffs_update_dinode_ckhash()
118 dip->di_ckhash = calculate_crc32c(~0L, (void *)dip, sizeof(*dip)); in ffs_update_dinode_ckhash()
122 * These are the low-level functions that actually read and write
137 * is returned. If filltype is non-NULL, additional memory is allocated
143 * EIO: non-existent or truncated superblock.
159 uint64_t size, blks; in ffs_sbget() local
174 for (i = 0; sblock_try[i] != -1; i++) { in ffs_sbget()
191 if (sblock_try[i] == -1) in ffs_sbget()
197 size = fs->fs_cssize; in ffs_sbget()
198 blks = howmany(size, fs->fs_fsize); in ffs_sbget()
199 if (fs->fs_contigsumsize > 0) in ffs_sbget()
200 size += fs->fs_ncg * sizeof(int32_t); in ffs_sbget()
201 size += fs->fs_ncg * sizeof(uint8_t); in ffs_sbget()
207 fs->fs_si = fs_si; in ffs_sbget()
209 UFS_FREE(fs->fs_si, filltype); in ffs_sbget()
213 fs->fs_csp = (struct csum *)space; in ffs_sbget()
214 for (i = 0; i < blks; i += fs->fs_frag) { in ffs_sbget()
215 size = fs->fs_bsize; in ffs_sbget()
216 if (i + fs->fs_frag > blks) in ffs_sbget()
217 size = (blks - i) * fs->fs_fsize; in ffs_sbget()
220 dbtob(fsbtodb(fs, fs->fs_csaddr + i)), (void **)&buf, size); in ffs_sbget()
224 UFS_FREE(fs->fs_csp, filltype); in ffs_sbget()
225 UFS_FREE(fs->fs_si, filltype); in ffs_sbget()
233 if (fs->fs_contigsumsize > 0) { in ffs_sbget()
234 fs->fs_maxcluster = lp = (int32_t *)space; in ffs_sbget()
235 for (i = 0; i < fs->fs_ncg; i++) in ffs_sbget()
236 *lp++ = fs->fs_contigsumsize; in ffs_sbget()
239 size = fs->fs_ncg * sizeof(uint8_t); in ffs_sbget()
240 fs->fs_contigdirs = (uint8_t *)space; in ffs_sbget()
241 bzero(fs->fs_contigdirs, size); in ffs_sbget()
262 if (fs->fs_magic == FS_BAD_MAGIC) in readsuper()
271 if (fs->fs_magic == FS_UFS1_MAGIC && (flags & UFS_ALTSBLK) == 0 && in readsuper()
272 fs->fs_bsize == SBLOCK_UFS2 && sblockloc == SBLOCK_UFS2) in readsuper()
281 if ((fs->fs_flags & FS_METACKHASH) == 0) in readsuper()
282 fs->fs_metackhash = 0; in readsuper()
284 * Clear any check-hashes that are not maintained in readsuper()
287 fs->fs_metackhash &= CK_SUPPORTED; in readsuper()
288 fs->fs_flags &= FS_SUPPORTED; in readsuper()
289 if (fs->fs_ckhash != (ckhash = ffs_calc_sbhash(fs))) { in readsuper()
296 res = uprintf("Superblock check-hash failed: recorded " in readsuper()
297 "check-hash 0x%x != computed check-hash 0x%x%s\n", in readsuper()
298 fs->fs_ckhash, ckhash, in readsuper()
304 * Print check-hash failure if no controlling terminal in readsuper()
305 * in kernel or always if in user-mode (libufs). in readsuper()
308 printf("Superblock check-hash failed: recorded " in readsuper()
309 "check-hash 0x%x != computed check-hash " in readsuper()
310 "0x%x%s\n", fs->fs_ckhash, ckhash, in readsuper()
317 fs->fs_sblockactualloc = sblockloc; in readsuper()
319 fs->fs_si = NULL; in readsuper()
327 * XXX - Parts get retired eventually.
338 if ((fs->fs_old_flags & FS_FLAGS_UPDATED) == 0) { in ffs_oldfscompat_read()
339 fs->fs_flags = fs->fs_old_flags; in ffs_oldfscompat_read()
340 fs->fs_old_flags |= FS_FLAGS_UPDATED; in ffs_oldfscompat_read()
341 fs->fs_sblockloc = sblockloc; in ffs_oldfscompat_read()
343 switch (fs->fs_magic) { in ffs_oldfscompat_read()
352 if (fs->fs_maxbsize != fs->fs_bsize) { in ffs_oldfscompat_read()
353 fs->fs_maxbsize = fs->fs_bsize; in ffs_oldfscompat_read()
354 fs->fs_time = fs->fs_old_time; in ffs_oldfscompat_read()
355 fs->fs_size = fs->fs_old_size; in ffs_oldfscompat_read()
356 fs->fs_dsize = fs->fs_old_dsize; in ffs_oldfscompat_read()
357 fs->fs_csaddr = fs->fs_old_csaddr; in ffs_oldfscompat_read()
358 fs->fs_cstotal.cs_ndir = fs->fs_old_cstotal.cs_ndir; in ffs_oldfscompat_read()
359 fs->fs_cstotal.cs_nbfree = fs->fs_old_cstotal.cs_nbfree; in ffs_oldfscompat_read()
360 fs->fs_cstotal.cs_nifree = fs->fs_old_cstotal.cs_nifree; in ffs_oldfscompat_read()
361 fs->fs_cstotal.cs_nffree = fs->fs_old_cstotal.cs_nffree; in ffs_oldfscompat_read()
363 if (fs->fs_old_inodefmt < FS_44INODEFMT) { in ffs_oldfscompat_read()
364 fs->fs_maxfilesize = ((uint64_t)1 << 31) - 1; in ffs_oldfscompat_read()
365 fs->fs_qbmask = ~fs->fs_bmask; in ffs_oldfscompat_read()
366 fs->fs_qfmask = ~fs->fs_fmask; in ffs_oldfscompat_read()
368 fs->fs_save_maxfilesize = fs->fs_maxfilesize; in ffs_oldfscompat_read()
369 maxfilesize = (uint64_t)0x80000000 * fs->fs_bsize - 1; in ffs_oldfscompat_read()
370 if (fs->fs_maxfilesize > maxfilesize) in ffs_oldfscompat_read()
371 fs->fs_maxfilesize = maxfilesize; in ffs_oldfscompat_read()
375 if (fs->fs_avgfilesize <= 0) in ffs_oldfscompat_read()
376 fs->fs_avgfilesize = AVFILESIZ; in ffs_oldfscompat_read()
377 if (fs->fs_avgfpdir <= 0) in ffs_oldfscompat_read()
378 fs->fs_avgfpdir = AFPDIR; in ffs_oldfscompat_read()
385 * XXX - Parts get retired eventually.
392 switch (fs->fs_magic) { in ffs_oldfscompat_write()
394 if (fs->fs_sblockloc != SBLOCK_UFS1 && in ffs_oldfscompat_write()
395 (fs->fs_old_flags & FS_FLAGS_UPDATED) == 0) { in ffs_oldfscompat_write()
398 fs->fs_fsmnt, fs->fs_sblockloc, SBLOCK_UFS1); in ffs_oldfscompat_write()
399 fs->fs_sblockloc = SBLOCK_UFS1; in ffs_oldfscompat_write()
404 fs->fs_old_time = fs->fs_time; in ffs_oldfscompat_write()
405 fs->fs_old_cstotal.cs_ndir = fs->fs_cstotal.cs_ndir; in ffs_oldfscompat_write()
406 fs->fs_old_cstotal.cs_nbfree = fs->fs_cstotal.cs_nbfree; in ffs_oldfscompat_write()
407 fs->fs_old_cstotal.cs_nifree = fs->fs_cstotal.cs_nifree; in ffs_oldfscompat_write()
408 fs->fs_old_cstotal.cs_nffree = fs->fs_cstotal.cs_nffree; in ffs_oldfscompat_write()
409 if (fs->fs_save_maxfilesize != 0) in ffs_oldfscompat_write()
410 fs->fs_maxfilesize = fs->fs_save_maxfilesize; in ffs_oldfscompat_write()
413 if (fs->fs_sblockloc != SBLOCK_UFS2 && in ffs_oldfscompat_write()
414 (fs->fs_old_flags & FS_FLAGS_UPDATED) == 0) { in ffs_oldfscompat_write()
417 fs->fs_fsmnt, fs->fs_sblockloc, SBLOCK_UFS2); in ffs_oldfscompat_write()
418 fs->fs_sblockloc = SBLOCK_UFS2; in ffs_oldfscompat_write()
427 * XXX - Parts get retired eventually.
443 switch (fs->fs_magic) { in ffs_oldfscompat_inode_read()
454 if (dp.dp1->di_ctime > now) { in ffs_oldfscompat_inode_read()
457 dp.dp1->di_ctime, (long)now); in ffs_oldfscompat_inode_read()
458 dp.dp1->di_ctime = now; in ffs_oldfscompat_inode_read()
461 if (dp.dp1->di_mtime > now) { in ffs_oldfscompat_inode_read()
464 dp.dp1->di_mtime, (long)now); in ffs_oldfscompat_inode_read()
465 dp.dp1->di_mtime = now; in ffs_oldfscompat_inode_read()
466 dp.dp1->di_ctime = now; in ffs_oldfscompat_inode_read()
469 if (dp.dp1->di_atime > now) { in ffs_oldfscompat_inode_read()
472 dp.dp1->di_atime, (long)now); in ffs_oldfscompat_inode_read()
473 dp.dp1->di_atime = now; in ffs_oldfscompat_inode_read()
474 dp.dp1->di_ctime = now; in ffs_oldfscompat_inode_read()
485 #define ILOG2(num) (fls(num) - 1)
494 #fmt ")\n", fs->fs_magic == FS_UFS1_MAGIC ? 1 : 2, \
504 #fmt ")%s\n", fs->fs_magic == FS_UFS1_MAGIC ? 1 : 2,\
515 fs->fs_magic == FS_UFS1_MAGIC ? 1 : 2, #lhs1, \
540 if (((fs->fs_magic != FS_UFS2_MAGIC) && in validate_sblock()
541 (bswap32(fs->fs_magic) == FS_UFS2_MAGIC)) || in validate_sblock()
542 ((fs->fs_magic != FS_UFS1_MAGIC) && in validate_sblock()
543 (bswap32(fs->fs_magic) == FS_UFS1_MAGIC))) { in validate_sblock()
554 (fs->fs_magic == FS_UFS1_MAGIC || fs->fs_magic == FS_UFS2_MAGIC)) { in validate_sblock()
555 error = -1; /* fail on first error */ in validate_sblock()
556 if (fs->fs_magic == FS_UFS2_MAGIC) { in validate_sblock()
557 FCHK(fs->fs_sblockloc, !=, SBLOCK_UFS2, %#jx); in validate_sblock()
558 } else if (fs->fs_magic == FS_UFS1_MAGIC) { in validate_sblock()
559 FCHK(fs->fs_sblockloc, <, 0, %jd); in validate_sblock()
560 FCHK(fs->fs_sblockloc, >, SBLOCK_UFS1, %jd); in validate_sblock()
562 FCHK(fs->fs_frag, <, 1, %jd); in validate_sblock()
563 FCHK(fs->fs_frag, >, MAXFRAG, %jd); in validate_sblock()
564 FCHK(fs->fs_bsize, <, MINBSIZE, %jd); in validate_sblock()
565 FCHK(fs->fs_bsize, >, MAXBSIZE, %jd); in validate_sblock()
566 FCHK(fs->fs_bsize, <, roundup(sizeof(struct fs), DEV_BSIZE), in validate_sblock()
568 FCHK(fs->fs_fsize, <, sectorsize, %jd); in validate_sblock()
569 FCHK(fs->fs_fsize * fs->fs_frag, !=, fs->fs_bsize, %jd); in validate_sblock()
570 FCHK(powerof2(fs->fs_fsize), ==, 0, %jd); in validate_sblock()
571 FCHK(fs->fs_sbsize, >, SBLOCKSIZE, %jd); in validate_sblock()
572 FCHK(fs->fs_sbsize, <, (signed)sizeof(struct fs), %jd); in validate_sblock()
573 FCHK(fs->fs_sbsize % sectorsize, !=, 0, %jd); in validate_sblock()
574 FCHK(fs->fs_fpg, <, 3 * fs->fs_frag, %jd); in validate_sblock()
575 FCHK(fs->fs_ncg, <, 1, %jd); in validate_sblock()
576 FCHK(fs->fs_fsbtodb, !=, ILOG2(fs->fs_fsize / sectorsize), %jd); in validate_sblock()
577 FCHK(fs->fs_old_cgoffset, <, 0, %jd); in validate_sblock()
578 FCHK2(fs->fs_old_cgoffset, >, 0, ~fs->fs_old_cgmask, <, 0, %jd); in validate_sblock()
579 FCHK(fs->fs_old_cgoffset * (~fs->fs_old_cgmask), >, fs->fs_fpg, in validate_sblock()
581 FCHK(fs->fs_sblkno, !=, roundup( in validate_sblock()
582 howmany(fs->fs_sblockloc + SBLOCKSIZE, fs->fs_fsize), in validate_sblock()
583 fs->fs_frag), %jd); in validate_sblock()
584 FCHK(CGSIZE(fs), >, fs->fs_bsize, %jd); in validate_sblock()
588 FCHK((uint64_t)fs->fs_ipg * fs->fs_ncg, >, in validate_sblock()
589 (((int64_t)(1)) << 32) - INOPB(fs), %jd); in validate_sblock()
590 FCHK(fs->fs_cstotal.cs_nifree, <, 0, %jd); in validate_sblock()
591 FCHK(fs->fs_cstotal.cs_nifree, >, in validate_sblock()
592 (uint64_t)fs->fs_ipg * fs->fs_ncg, %jd); in validate_sblock()
593 FCHK(fs->fs_cstotal.cs_ndir, >, in validate_sblock()
594 ((uint64_t)fs->fs_ipg * fs->fs_ncg) - in validate_sblock()
595 fs->fs_cstotal.cs_nifree, %jd); in validate_sblock()
596 FCHK(fs->fs_size, <, 8 * fs->fs_frag, %jd); in validate_sblock()
597 FCHK(fs->fs_size, <=, ((int64_t)fs->fs_ncg - 1) * fs->fs_fpg, in validate_sblock()
599 FCHK(fs->fs_size, >, (int64_t)fs->fs_ncg * fs->fs_fpg, %jd); in validate_sblock()
600 FCHK(fs->fs_csaddr, <, 0, %jd); in validate_sblock()
601 FCHK(fs->fs_cssize, !=, in validate_sblock()
602 fragroundup(fs, fs->fs_ncg * sizeof(struct csum)), %jd); in validate_sblock()
603 FCHK(fs->fs_csaddr + howmany(fs->fs_cssize, fs->fs_fsize), >, in validate_sblock()
604 fs->fs_size, %jd); in validate_sblock()
605 FCHK(fs->fs_csaddr, <, cgdmin(fs, dtog(fs, fs->fs_csaddr)), in validate_sblock()
607 FCHK(dtog(fs, fs->fs_csaddr + howmany(fs->fs_cssize, in validate_sblock()
608 fs->fs_fsize)), >, dtog(fs, fs->fs_csaddr), %jd); in validate_sblock()
611 if (fs->fs_magic == FS_UFS2_MAGIC) { in validate_sblock()
613 FCHK2(fs->fs_sblockactualloc, !=, SBLOCK_UFS2, in validate_sblock()
614 fs->fs_sblockactualloc, !=, 0, %jd); in validate_sblock()
615 FCHK(fs->fs_sblockloc, !=, SBLOCK_UFS2, %#jx); in validate_sblock()
616 FCHK(fs->fs_maxsymlinklen, !=, ((UFS_NDADDR + UFS_NIADDR) * in validate_sblock()
618 FCHK(fs->fs_nindir, !=, fs->fs_bsize / sizeof(ufs2_daddr_t), in validate_sblock()
620 FCHK(fs->fs_inopb, !=, in validate_sblock()
621 fs->fs_bsize / sizeof(struct ufs2_dinode), %jd); in validate_sblock()
622 } else if (fs->fs_magic == FS_UFS1_MAGIC) { in validate_sblock()
624 FCHK(fs->fs_sblockactualloc, >, SBLOCK_UFS1, %jd); in validate_sblock()
625 FCHK(fs->fs_sblockloc, <, 0, %jd); in validate_sblock()
626 FCHK(fs->fs_sblockloc, >, SBLOCK_UFS1, %jd); in validate_sblock()
627 FCHK(fs->fs_nindir, !=, fs->fs_bsize / sizeof(ufs1_daddr_t), in validate_sblock()
629 FCHK(fs->fs_inopb, !=, in validate_sblock()
630 fs->fs_bsize / sizeof(struct ufs1_dinode), %jd); in validate_sblock()
631 FCHK(fs->fs_maxsymlinklen, !=, ((UFS_NDADDR + UFS_NIADDR) * in validate_sblock()
633 WCHK(fs->fs_old_inodefmt, !=, FS_44INODEFMT, %jd); in validate_sblock()
634 WCHK(fs->fs_old_rotdelay, !=, 0, %jd); in validate_sblock()
635 WCHK(fs->fs_old_rps, !=, 60, %jd); in validate_sblock()
636 WCHK(fs->fs_old_nspf, !=, fs->fs_fsize / sectorsize, %jd); in validate_sblock()
637 WCHK(fs->fs_old_interleave, !=, 1, %jd); in validate_sblock()
638 WCHK(fs->fs_old_trackskew, !=, 0, %jd); in validate_sblock()
639 WCHK(fs->fs_old_cpc, !=, 0, %jd); in validate_sblock()
640 WCHK(fs->fs_old_postblformat, !=, 1, %jd); in validate_sblock()
641 FCHK(fs->fs_old_nrpos, !=, 1, %jd); in validate_sblock()
642 WCHK(fs->fs_old_nsect, !=, fs->fs_old_spc, %jd); in validate_sblock()
643 WCHK(fs->fs_old_npsect, !=, fs->fs_old_spc, %jd); in validate_sblock()
648 FCHK(fs->fs_bsize, <, MINBSIZE, %jd); in validate_sblock()
649 FCHK(fs->fs_bsize, >, MAXBSIZE, %jd); in validate_sblock()
650 FCHK(fs->fs_bsize, <, roundup(sizeof(struct fs), DEV_BSIZE), %jd); in validate_sblock()
651 FCHK(powerof2(fs->fs_bsize), ==, 0, %jd); in validate_sblock()
652 FCHK(fs->fs_frag, <, 1, %jd); in validate_sblock()
653 FCHK(fs->fs_frag, >, MAXFRAG, %jd); in validate_sblock()
654 FCHK(fs->fs_frag, !=, numfrags(fs, fs->fs_bsize), %jd); in validate_sblock()
655 FCHK(fs->fs_fsize, <, sectorsize, %jd); in validate_sblock()
656 FCHK(fs->fs_fsize * fs->fs_frag, !=, fs->fs_bsize, %jd); in validate_sblock()
657 FCHK(powerof2(fs->fs_fsize), ==, 0, %jd); in validate_sblock()
658 FCHK(fs->fs_fpg, <, 3 * fs->fs_frag, %jd); in validate_sblock()
659 FCHK(fs->fs_ncg, <, 1, %jd); in validate_sblock()
660 FCHK(fs->fs_ipg, <, fs->fs_inopb, %jd); in validate_sblock()
661 FCHK((uint64_t)fs->fs_ipg * fs->fs_ncg, >, in validate_sblock()
662 (((int64_t)(1)) << 32) - INOPB(fs), %jd); in validate_sblock()
663 FCHK(fs->fs_cstotal.cs_nifree, <, 0, %jd); in validate_sblock()
664 FCHK(fs->fs_cstotal.cs_nifree, >, (uint64_t)fs->fs_ipg * fs->fs_ncg, in validate_sblock()
666 FCHK(fs->fs_cstotal.cs_ndir, <, 0, %jd); in validate_sblock()
667 FCHK(fs->fs_cstotal.cs_ndir, >, in validate_sblock()
668 ((uint64_t)fs->fs_ipg * fs->fs_ncg) - fs->fs_cstotal.cs_nifree, in validate_sblock()
670 FCHK(fs->fs_sbsize, >, SBLOCKSIZE, %jd); in validate_sblock()
671 FCHK(fs->fs_sbsize, <, (signed)sizeof(struct fs), %jd); in validate_sblock()
673 if (fs->fs_maxbsize == 0) in validate_sblock()
674 fs->fs_maxbsize = fs->fs_bsize; in validate_sblock()
675 FCHK(fs->fs_maxbsize, <, fs->fs_bsize, %jd); in validate_sblock()
676 FCHK(powerof2(fs->fs_maxbsize), ==, 0, %jd); in validate_sblock()
677 FCHK(fs->fs_maxbsize, >, FS_MAXCONTIG * fs->fs_bsize, %jd); in validate_sblock()
678 FCHK(fs->fs_bmask, !=, ~(fs->fs_bsize - 1), %#jx); in validate_sblock()
679 FCHK(fs->fs_fmask, !=, ~(fs->fs_fsize - 1), %#jx); in validate_sblock()
680 FCHK(fs->fs_qbmask, !=, ~fs->fs_bmask, %#jx); in validate_sblock()
681 FCHK(fs->fs_qfmask, !=, ~fs->fs_fmask, %#jx); in validate_sblock()
682 FCHK(fs->fs_bshift, !=, ILOG2(fs->fs_bsize), %jd); in validate_sblock()
683 FCHK(fs->fs_fshift, !=, ILOG2(fs->fs_fsize), %jd); in validate_sblock()
684 FCHK(fs->fs_fragshift, !=, ILOG2(fs->fs_frag), %jd); in validate_sblock()
685 FCHK(fs->fs_fsbtodb, !=, ILOG2(fs->fs_fsize / sectorsize), %jd); in validate_sblock()
686 FCHK(fs->fs_old_cgoffset, <, 0, %jd); in validate_sblock()
687 FCHK2(fs->fs_old_cgoffset, >, 0, ~fs->fs_old_cgmask, <, 0, %jd); in validate_sblock()
688 FCHK(fs->fs_old_cgoffset * (~fs->fs_old_cgmask), >, fs->fs_fpg, %jd); in validate_sblock()
689 FCHK(CGSIZE(fs), >, fs->fs_bsize, %jd); in validate_sblock()
697 FCHK(fs->fs_sbsize % sectorsize, !=, 0, %jd); in validate_sblock()
698 FCHK(fs->fs_ipg % fs->fs_inopb, !=, 0, %jd); in validate_sblock()
699 FCHK(fs->fs_sblkno, !=, roundup( in validate_sblock()
700 howmany(fs->fs_sblockloc + SBLOCKSIZE, fs->fs_fsize), in validate_sblock()
701 fs->fs_frag), %jd); in validate_sblock()
702 FCHK(fs->fs_cblkno, !=, fs->fs_sblkno + in validate_sblock()
703 roundup(howmany(SBLOCKSIZE, fs->fs_fsize), fs->fs_frag), %jd); in validate_sblock()
704 FCHK(fs->fs_iblkno, !=, fs->fs_cblkno + fs->fs_frag, %jd); in validate_sblock()
705 FCHK(fs->fs_dblkno, !=, fs->fs_iblkno + fs->fs_ipg / INOPF(fs), %jd); in validate_sblock()
706 FCHK(fs->fs_cgsize, >, fs->fs_bsize, %jd); in validate_sblock()
707 FCHK(fs->fs_cgsize, <, fs->fs_fsize, %jd); in validate_sblock()
708 FCHK(fs->fs_cgsize % fs->fs_fsize, !=, 0, %jd); in validate_sblock()
715 WCHK(fs->fs_dsize, !=, fs->fs_size - fs->fs_sblkno - in validate_sblock()
716 fs->fs_ncg * (fs->fs_dblkno - fs->fs_sblkno) - in validate_sblock()
717 howmany(fs->fs_cssize, fs->fs_fsize), %jd); in validate_sblock()
719 WCHK(fs->fs_metaspace, <, 0, %jd); in validate_sblock()
720 WCHK(fs->fs_metaspace, >, fs->fs_fpg / 2, %jd); in validate_sblock()
721 WCHK(fs->fs_minfree, >, 99, %jd%%); in validate_sblock()
722 maxfilesize = fs->fs_bsize * UFS_NDADDR - 1; in validate_sblock()
723 for (sizepb = fs->fs_bsize, i = 0; i < UFS_NIADDR; i++) { in validate_sblock()
727 WCHK(fs->fs_maxfilesize, >, maxfilesize, %jd); in validate_sblock()
739 FCHK(fs->fs_size, <, 8 * fs->fs_frag, %jd); in validate_sblock()
740 FCHK(fs->fs_size, <=, ((int64_t)fs->fs_ncg - 1) * fs->fs_fpg, %jd); in validate_sblock()
741 FCHK(fs->fs_size, >, (int64_t)fs->fs_ncg * fs->fs_fpg, %jd); in validate_sblock()
749 FCHK(fs->fs_csaddr, <, 0, %jd); in validate_sblock()
750 FCHK(fs->fs_cssize, !=, in validate_sblock()
751 fragroundup(fs, fs->fs_ncg * sizeof(struct csum)), %jd); in validate_sblock()
752 FCHK(fs->fs_csaddr + howmany(fs->fs_cssize, fs->fs_fsize), >, in validate_sblock()
753 fs->fs_size, %jd); in validate_sblock()
754 FCHK(fs->fs_csaddr, <, cgdmin(fs, dtog(fs, fs->fs_csaddr)), %jd); in validate_sblock()
755 FCHK(dtog(fs, fs->fs_csaddr + howmany(fs->fs_cssize, fs->fs_fsize)), >, in validate_sblock()
756 dtog(fs, fs->fs_csaddr), %jd); in validate_sblock()
773 * those (mostly 32-bit machines) can (very slowly) handle I/O in validate_sblock()
776 WCHK(fs->fs_maxcontig, <, 0, %jd); in validate_sblock()
777 WCHK(fs->fs_maxcontig, >, MAX(256, maxphys / fs->fs_bsize), %jd); in validate_sblock()
778 FCHK2(fs->fs_maxcontig, ==, 0, fs->fs_contigsumsize, !=, 0, %jd); in validate_sblock()
779 FCHK2(fs->fs_maxcontig, >, 1, fs->fs_contigsumsize, !=, in validate_sblock()
780 MIN(fs->fs_maxcontig, FS_MAXCONTIG), %jd); in validate_sblock()
853 * parameters have been saved in the boot area. in ffs_sbsearch()
858 "boot zone recovery data.\n"); in ffs_sbsearch()
864 * We need fragments-per-group, number of cylinder groups, in ffs_sbsearch()
869 * details at the end of the boot block area at the start in ffs_sbsearch()
871 * by a boot block, we fail. But usually they are there in ffs_sbsearch()
880 if ((error = (*readfunc)(devfd, (SBLOCK_UFS2 - secsize), in ffs_sbsearch()
886 fsr = (struct fsrecovery *)&cp[secsize - sizeof *fsr]; in ffs_sbsearch()
887 if (fsr->fsr_magic != FS_UFS2_MAGIC || in ffs_sbsearch()
894 protofs->fs_fpg = fsr->fsr_fpg; in ffs_sbsearch()
895 protofs->fs_fsbtodb = fsr->fsr_fsbtodb; in ffs_sbsearch()
896 protofs->fs_sblkno = fsr->fsr_sblkno; in ffs_sbsearch()
897 protofs->fs_magic = fsr->fsr_magic; in ffs_sbsearch()
898 protofs->fs_ncg = fsr->fsr_ncg; in ffs_sbsearch()
907 for (cg = 0; cg < protofs->fs_ncg; cg++) { in ffs_sbsearch()
924 * is to see if the standard superblock has only non-critical errors. in ffs_sbsearch()
930 "only non-critical errors in standard superblock\n"); in ffs_sbsearch()
940 "non-critical errors.\n"); in ffs_sbsearch()
958 int i, error, blks, size; in ffs_sbput() local
965 if (fs->fs_si != NULL && fs->fs_csp != NULL) { in ffs_sbput()
966 blks = howmany(fs->fs_cssize, fs->fs_fsize); in ffs_sbput()
967 space = (uint8_t *)fs->fs_csp; in ffs_sbput()
968 for (i = 0; i < blks; i += fs->fs_frag) { in ffs_sbput()
969 size = fs->fs_bsize; in ffs_sbput()
970 if (i + fs->fs_frag > blks) in ffs_sbput()
971 size = (blks - i) * fs->fs_fsize; in ffs_sbput()
973 dbtob(fsbtodb(fs, fs->fs_csaddr + i)), in ffs_sbput()
979 fs->fs_fmod = 0; in ffs_sbput()
982 fs->fs_time = time_second; in ffs_sbput()
984 fs->fs_time = time(NULL); in ffs_sbput()
987 fs_si = fs->fs_si; in ffs_sbput()
988 fs->fs_si = NULL; in ffs_sbput()
989 fs->fs_ckhash = ffs_calc_sbhash(fs); in ffs_sbput()
990 error = (*writefunc)(devfd, loc, fs, fs->fs_sbsize); in ffs_sbput()
999 return (-error - 1); in ffs_sbput()
1000 fs->fs_si = fs_si; in ffs_sbput()
1005 * Calculate the check-hash for a superblock.
1019 * if ((fs->fs_flags & FS_METACKHASH) == 0) in ffs_calc_sbhash()
1020 * fs->fs_metackhash = 0; in ffs_calc_sbhash()
1022 * This leaves (fs->fs_metackhash & CK_SUPERBLOCK) == 0) with an in ffs_calc_sbhash()
1023 * old stale value in the fs->fs_ckhash field. Thus the need to in ffs_calc_sbhash()
1026 if ((fs->fs_metackhash & CK_SUPERBLOCK) == 0) in ffs_calc_sbhash()
1027 return (fs->fs_ckhash); in ffs_calc_sbhash()
1029 save_ckhash = fs->fs_ckhash; in ffs_calc_sbhash()
1030 fs->fs_ckhash = 0; in ffs_calc_sbhash()
1033 * verifying that fs->fs_sbsize <= SBLOCKSIZE. in ffs_calc_sbhash()
1035 ckhash = calculate_crc32c(~0L, (void *)fs, fs->fs_sbsize); in ffs_calc_sbhash()
1036 fs->fs_ckhash = save_ckhash; in ffs_calc_sbhash()
1051 inblk = (int)(fragtbl[fs->fs_frag][fragmap]) << 1; in ffs_fragacct()
1053 for (siz = 1; siz < fs->fs_frag; siz++) { in ffs_fragacct()
1054 if ((inblk & (1 << (siz + (fs->fs_frag % NBBY)))) == 0) in ffs_fragacct()
1058 for (pos = siz; pos <= fs->fs_frag; pos++) { in ffs_fragacct()
1081 switch ((int)fs->fs_frag) { in ffs_isblock()
1109 switch ((int)fs->fs_frag) { in ffs_isfreeblock()
1134 switch ((int)fs->fs_frag) { in ffs_clrblock()
1162 switch ((int)fs->fs_frag) { in ffs_setblock()
1186 * Cnt == 1 means free; cnt == -1 means allocating.
1197 if (fs->fs_contigsumsize <= 0) in ffs_clusteracct()
1212 end = start + fs->fs_contigsumsize; in ffs_clusteracct()
1213 if (end >= cgp->cg_nclusterblks) in ffs_clusteracct()
1214 end = cgp->cg_nclusterblks; in ffs_clusteracct()
1221 if ((i & (NBBY - 1)) != (NBBY - 1)) { in ffs_clusteracct()
1228 forw = i - start; in ffs_clusteracct()
1232 start = blkno - 1; in ffs_clusteracct()
1233 end = start - fs->fs_contigsumsize; in ffs_clusteracct()
1235 end = -1; in ffs_clusteracct()
1237 map = *mapp--; in ffs_clusteracct()
1239 for (i = start; i > end; i--) { in ffs_clusteracct()
1242 if ((i & (NBBY - 1)) != 0) { in ffs_clusteracct()
1245 map = *mapp--; in ffs_clusteracct()
1246 bit = 1U << (NBBY - 1); in ffs_clusteracct()
1249 back = start - i; in ffs_clusteracct()
1255 if (i > fs->fs_contigsumsize) in ffs_clusteracct()
1256 i = fs->fs_contigsumsize; in ffs_clusteracct()
1259 sump[back] -= cnt; in ffs_clusteracct()
1261 sump[forw] -= cnt; in ffs_clusteracct()
1265 lp = &sump[fs->fs_contigsumsize]; in ffs_clusteracct()
1266 for (i = fs->fs_contigsumsize; i > 0; i--) in ffs_clusteracct()
1267 if (*lp-- > 0) in ffs_clusteracct()
1269 fs->fs_maxcluster[cgp->cg_cgx] = i; in ffs_clusteracct()