Lines Matching refs:fs

109 static void	ffs_blkfree_cg(struct ufsmount *, struct fs *,
115 static void ffs_checkcgintegrity(struct fs *, uint64_t, int);
125 static ufs1_daddr_t ffs_mapsearch(struct fs *, struct cg *, ufs2_daddr_t, int);
158 struct fs *fs; in ffs_alloc() local
169 fs = ump->um_fs; in ffs_alloc()
172 if ((uint64_t)size > fs->fs_bsize || fragoff(fs, size) != 0) { in ffs_alloc()
174 devtoname(ump->um_dev), (long)fs->fs_bsize, size, in ffs_alloc()
175 fs->fs_fsmnt); in ffs_alloc()
190 if (size == fs->fs_bsize && fs->fs_cstotal.cs_nbfree == 0) in ffs_alloc()
193 freespace(fs, fs->fs_minfree) - numfrags(fs, size) < 0) in ffs_alloc()
195 if (bpref >= fs->fs_size) in ffs_alloc()
198 cg = ino_to_cg(fs, ip->i_number); in ffs_alloc()
200 cg = dtog(fs, bpref); in ffs_alloc()
223 softdep_request_cleanup(fs, ITOV(ip), cred, FLUSH_BLOCKS_WAIT); in ffs_alloc()
233 ffs_fserr(fs, ip->i_number, "filesystem full"); in ffs_alloc()
235 fs->fs_fsmnt); in ffs_alloc()
262 struct fs *fs; in ffs_realloccg() local
272 fs = ump->um_fs; in ffs_realloccg()
283 if ((uint64_t)osize > fs->fs_bsize || fragoff(fs, osize) != 0 || in ffs_realloccg()
284 (uint64_t)nsize > fs->fs_bsize || fragoff(fs, nsize) != 0) { in ffs_realloccg()
287 devtoname(ump->um_dev), (long)fs->fs_bsize, osize, in ffs_realloccg()
288 nsize, fs->fs_fsmnt); in ffs_realloccg()
297 freespace(fs, fs->fs_minfree) - numfrags(fs, nsize - osize) < 0) { in ffs_realloccg()
302 devtoname(ump->um_dev), (long)fs->fs_bsize, (intmax_t)bprev, in ffs_realloccg()
303 fs->fs_fsmnt); in ffs_realloccg()
318 bp->b_blkno = fsbtodb(fs, bprev); in ffs_realloccg()
332 cg = dtog(fs, bprev); in ffs_realloccg()
336 if (bp->b_blkno != fsbtodb(fs, bno)) in ffs_realloccg()
355 if (bpref >= fs->fs_size) in ffs_realloccg()
357 switch ((int)fs->fs_optim) { in ffs_realloccg()
367 if (fs->fs_minfree <= 5 || in ffs_realloccg()
368 fs->fs_cstotal.cs_nffree > in ffs_realloccg()
369 (off_t)fs->fs_dsize * fs->fs_minfree / (2 * 100)) in ffs_realloccg()
372 fs->fs_fsmnt); in ffs_realloccg()
373 fs->fs_optim = FS_OPTTIME; in ffs_realloccg()
386 request = fs->fs_bsize; in ffs_realloccg()
387 if (fs->fs_cstotal.cs_nffree < in ffs_realloccg()
388 (off_t)fs->fs_dsize * (fs->fs_minfree - 2) / 100) in ffs_realloccg()
391 fs->fs_fsmnt); in ffs_realloccg()
392 fs->fs_optim = FS_OPTSPACE; in ffs_realloccg()
396 devtoname(ump->um_dev), (long)fs->fs_optim, fs->fs_fsmnt); in ffs_realloccg()
402 bp->b_blkno = fsbtodb(fs, bno); in ffs_realloccg()
418 ffs_blkfree(ump, fs, ump->um_devvp, bprev, (long)osize, in ffs_realloccg()
456 softdep_request_cleanup(fs, vp, cred, FLUSH_BLOCKS_WAIT); in ffs_realloccg()
468 ffs_fserr(fs, ip->i_number, "filesystem full"); in ffs_realloccg()
470 fs->fs_fsmnt); in ffs_realloccg()
568 struct fs *fs; in ffs_reallocblks_ufs1() local
584 fs = ump->um_fs; in ffs_reallocblks_ufs1()
591 if (fs->fs_contigsumsize <= 0 || freespace(fs, 4) < 0) in ffs_reallocblks_ufs1()
600 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs1()
606 ssize = fsbtodb(fs, fs->fs_frag); in ffs_reallocblks_ufs1()
628 if (dtog(fs, dbtofsb(fs, buflist->bs_children[0]->b_blkno)) != in ffs_reallocblks_ufs1()
629 dtog(fs, dbtofsb(fs, buflist->bs_children[len - 1]->b_blkno))) in ffs_reallocblks_ufs1()
642 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &sbp)) { in ffs_reallocblks_ufs1()
662 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &ebp)) in ffs_reallocblks_ufs1()
676 pref = cgdata(fs, ip->i_nextclustercg); in ffs_reallocblks_ufs1()
682 cg = dtog(fs, pref); in ffs_reallocblks_ufs1()
683 MPASS(cg < fs->fs_ncg); in ffs_reallocblks_ufs1()
684 for (i = min(maxclustersearch, fs->fs_ncg); i > 0; i--) { in ffs_reallocblks_ufs1()
688 if (cg >= fs->fs_ncg) in ffs_reallocblks_ufs1()
715 for (bap = &sbap[soff], i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs1()
722 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs1()
724 if (dbtofsb(fs, buflist->bs_children[i]->b_blkno) != *bap) in ffs_reallocblks_ufs1()
734 blkno, *bap, fs->fs_bsize, fs->fs_bsize, in ffs_reallocblks_ufs1()
780 for (blkno = newblk, i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs1()
797 ffs_blkfree(ump, fs, ump->um_devvp, in ffs_reallocblks_ufs1()
798 dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs1()
799 fs->fs_bsize, ip->i_number, vp->v_type, NULL, in ffs_reallocblks_ufs1()
802 bp->b_blkno = fsbtodb(fs, blkno); in ffs_reallocblks_ufs1()
804 if (!ffs_checkfreeblk(ip, dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs1()
805 fs->fs_bsize)) in ffs_reallocblks_ufs1()
836 struct fs *fs; in ffs_reallocblks_ufs2() local
851 fs = ump->um_fs; in ffs_reallocblks_ufs2()
858 if (fs->fs_contigsumsize <= 0 || freespace(fs, 4) < 0) in ffs_reallocblks_ufs2()
867 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs2()
873 ssize = fsbtodb(fs, fs->fs_frag); in ffs_reallocblks_ufs2()
895 if (dtog(fs, dbtofsb(fs, buflist->bs_children[0]->b_blkno)) != in ffs_reallocblks_ufs2()
896 dtog(fs, dbtofsb(fs, buflist->bs_children[len - 1]->b_blkno))) in ffs_reallocblks_ufs2()
909 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &sbp)) { in ffs_reallocblks_ufs2()
929 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &ebp)) in ffs_reallocblks_ufs2()
943 pref = cgdata(fs, ip->i_nextclustercg); in ffs_reallocblks_ufs2()
949 cg = dtog(fs, pref); in ffs_reallocblks_ufs2()
950 MPASS(cg < fs->fs_ncg); in ffs_reallocblks_ufs2()
951 for (i = min(maxclustersearch, fs->fs_ncg); i > 0; i--) { in ffs_reallocblks_ufs2()
955 if (cg >= fs->fs_ncg) in ffs_reallocblks_ufs2()
981 for (bap = &sbap[soff], i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs2()
988 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs2()
990 if (dbtofsb(fs, buflist->bs_children[i]->b_blkno) != *bap) in ffs_reallocblks_ufs2()
1000 blkno, *bap, fs->fs_bsize, fs->fs_bsize, in ffs_reallocblks_ufs2()
1046 for (blkno = newblk, i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs2()
1063 ffs_blkfree(ump, fs, ump->um_devvp, in ffs_reallocblks_ufs2()
1064 dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs2()
1065 fs->fs_bsize, ip->i_number, vp->v_type, NULL, in ffs_reallocblks_ufs2()
1068 bp->b_blkno = fsbtodb(fs, blkno); in ffs_reallocblks_ufs2()
1070 if (!ffs_checkfreeblk(ip, dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs2()
1071 fs->fs_bsize)) in ffs_reallocblks_ufs2()
1117 struct fs *fs; in ffs_valloc() local
1128 fs = ump->um_fs; in ffs_valloc()
1133 if (fs->fs_cstotal.cs_nifree == 0) in ffs_valloc()
1140 if (ipref >= fs->fs_ncg * fs->fs_ipg) in ffs_valloc()
1142 cg = ino_to_cg(fs, ipref); in ffs_valloc()
1148 if (fs->fs_contigdirs[cg] < 255) in ffs_valloc()
1149 fs->fs_contigdirs[cg]++; in ffs_valloc()
1151 if (fs->fs_contigdirs[cg] > 0) in ffs_valloc()
1152 fs->fs_contigdirs[cg]--; in ffs_valloc()
1174 ip->i_mode, (uintmax_t)ip->i_number, fs->fs_fsmnt); in ffs_valloc()
1177 if (DIP(ip, i_blocks) && (fs->fs_flags & FS_UNCLEAN) == 0) { /* XXX */ in ffs_valloc()
1179 fs->fs_fsmnt, (intmax_t)ino, (long)DIP(ip, i_blocks)); in ffs_valloc()
1192 if (fs->fs_magic == FS_UFS2_MAGIC) { in ffs_valloc()
1200 if (fs->fs_magic == FS_UFS2_MAGIC) { in ffs_valloc()
1210 softdep_request_cleanup(fs, pvp, cred, FLUSH_INODES_WAIT); in ffs_valloc()
1219 ffs_fserr(fs, pip->i_number, "out of inodes"); in ffs_valloc()
1221 fs->fs_fsmnt); in ffs_valloc()
1244 struct fs *fs; in ffs_dirpref() local
1252 fs = ITOFS(pip); in ffs_dirpref()
1254 avgifree = fs->fs_cstotal.cs_nifree / fs->fs_ncg; in ffs_dirpref()
1255 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_dirpref()
1256 avgndir = fs->fs_cstotal.cs_ndir / fs->fs_ncg; in ffs_dirpref()
1277 range = fs->fs_ncg / (1 << depth); in ffs_dirpref()
1278 curcg = ino_to_cg(fs, pip->i_number); in ffs_dirpref()
1281 start += fs->fs_ncg; in ffs_dirpref()
1283 if (end >= fs->fs_ncg) in ffs_dirpref()
1284 end -= fs->fs_ncg; in ffs_dirpref()
1291 prefcg += fs->fs_ncg; in ffs_dirpref()
1292 if (prefcg >= fs->fs_ncg) in ffs_dirpref()
1293 prefcg -= fs->fs_ncg; in ffs_dirpref()
1305 maxndir = min(avgndir + (1 << depth), fs->fs_ipg); in ffs_dirpref()
1312 cgsize = fs->fs_fsize * fs->fs_fpg; in ffs_dirpref()
1313 dirsize = fs->fs_avgfilesize * fs->fs_avgfpdir; in ffs_dirpref()
1314 curdirsize = avgndir ? (cgsize - avgbfree * fs->fs_bsize) / avgndir : 0; in ffs_dirpref()
1320 maxcontigdirs = min((avgbfree * fs->fs_bsize) / dirsize, 255); in ffs_dirpref()
1321 if (fs->fs_avgfpdir > 0) in ffs_dirpref()
1323 fs->fs_ipg / fs->fs_avgfpdir); in ffs_dirpref()
1349 for (cg = prefcg; cg < fs->fs_ncg; cg++) in ffs_dirpref()
1350 if (fs->fs_cs(fs, cg).cs_ndir < maxndir && in ffs_dirpref()
1351 fs->fs_cs(fs, cg).cs_nifree >= minifree && in ffs_dirpref()
1352 fs->fs_cs(fs, cg).cs_nbfree >= minbfree) { in ffs_dirpref()
1353 if (fs->fs_contigdirs[cg] < maxcontigdirs) in ffs_dirpref()
1354 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1357 if (fs->fs_cs(fs, cg).cs_ndir < maxndir && in ffs_dirpref()
1358 fs->fs_cs(fs, cg).cs_nifree >= minifree && in ffs_dirpref()
1359 fs->fs_cs(fs, cg).cs_nbfree >= minbfree) { in ffs_dirpref()
1360 if (fs->fs_contigdirs[cg] < maxcontigdirs) in ffs_dirpref()
1361 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1366 for (cg = prefcg; cg < fs->fs_ncg; cg++) in ffs_dirpref()
1367 if (fs->fs_cs(fs, cg).cs_nifree >= avgifree) in ffs_dirpref()
1368 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1370 if (fs->fs_cs(fs, cg).cs_nifree >= avgifree) in ffs_dirpref()
1372 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1410 struct fs *fs; in ffs_blkpref_ufs1() local
1417 fs = ITOFS(ip); in ffs_blkpref_ufs1()
1429 inocg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs1()
1436 pref = cgmeta(fs, inocg); in ffs_blkpref_ufs1()
1441 if (indx == -1 && lbn < UFS_NDADDR + NINDIR(fs) && in ffs_blkpref_ufs1()
1443 pref = ip->i_din1->di_db[UFS_NDADDR - 1] + fs->fs_frag; in ffs_blkpref_ufs1()
1444 if (dtog(fs, pref) >= fs->fs_ncg) in ffs_blkpref_ufs1()
1456 if (pref != 0 && pref >= cgdata(fs, inocg) && in ffs_blkpref_ufs1()
1457 pref < cgbase(fs, inocg + 1)) { in ffs_blkpref_ufs1()
1458 if (dtog(fs, pref + fs->fs_frag) >= fs->fs_ncg) in ffs_blkpref_ufs1()
1460 return (pref + fs->fs_frag); in ffs_blkpref_ufs1()
1474 fs->fs_bsize) != 0) in ffs_blkpref_ufs1()
1477 if (indx % fs->fs_maxbpg == 0 || prevbn == 0) { in ffs_blkpref_ufs1()
1483 return (cgmeta(fs, inocg)); in ffs_blkpref_ufs1()
1489 if (lbn < UFS_NDADDR + NINDIR(fs)) in ffs_blkpref_ufs1()
1490 return (cgdata(fs, inocg)); in ffs_blkpref_ufs1()
1496 startcg = inocg + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs1()
1498 startcg = dtog(fs, prevbn) + 1; in ffs_blkpref_ufs1()
1499 startcg %= fs->fs_ncg; in ffs_blkpref_ufs1()
1500 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs1()
1501 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs1()
1502 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs1()
1503 fs->fs_cgrotor = cg; in ffs_blkpref_ufs1()
1504 return (cgdata(fs, cg)); in ffs_blkpref_ufs1()
1507 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs1()
1508 fs->fs_cgrotor = cg; in ffs_blkpref_ufs1()
1509 return (cgdata(fs, cg)); in ffs_blkpref_ufs1()
1516 if (dtog(fs, prevbn + fs->fs_frag) >= fs->fs_ncg) in ffs_blkpref_ufs1()
1518 return (prevbn + fs->fs_frag); in ffs_blkpref_ufs1()
1530 struct fs *fs; in ffs_blkpref_ufs2() local
1537 fs = ITOFS(ip); in ffs_blkpref_ufs2()
1549 inocg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs2()
1556 pref = cgmeta(fs, inocg); in ffs_blkpref_ufs2()
1561 if (indx == -1 && lbn < UFS_NDADDR + NINDIR(fs) && in ffs_blkpref_ufs2()
1563 pref = ip->i_din2->di_db[UFS_NDADDR - 1] + fs->fs_frag; in ffs_blkpref_ufs2()
1564 if (dtog(fs, pref) >= fs->fs_ncg) in ffs_blkpref_ufs2()
1576 if (pref != 0 && pref >= cgdata(fs, inocg) && in ffs_blkpref_ufs2()
1577 pref < cgbase(fs, inocg + 1)) { in ffs_blkpref_ufs2()
1578 if (dtog(fs, pref + fs->fs_frag) >= fs->fs_ncg) in ffs_blkpref_ufs2()
1580 return (pref + fs->fs_frag); in ffs_blkpref_ufs2()
1594 fs->fs_bsize) != 0) in ffs_blkpref_ufs2()
1597 if (indx % fs->fs_maxbpg == 0 || prevbn == 0) { in ffs_blkpref_ufs2()
1603 return (cgmeta(fs, inocg)); in ffs_blkpref_ufs2()
1609 if (lbn < UFS_NDADDR + NINDIR(fs)) in ffs_blkpref_ufs2()
1610 return (cgdata(fs, inocg)); in ffs_blkpref_ufs2()
1616 startcg = inocg + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs2()
1618 startcg = dtog(fs, prevbn) + 1; in ffs_blkpref_ufs2()
1619 startcg %= fs->fs_ncg; in ffs_blkpref_ufs2()
1620 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs2()
1621 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs2()
1622 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
1623 fs->fs_cgrotor = cg; in ffs_blkpref_ufs2()
1624 return (cgdata(fs, cg)); in ffs_blkpref_ufs2()
1627 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
1628 fs->fs_cgrotor = cg; in ffs_blkpref_ufs2()
1629 return (cgdata(fs, cg)); in ffs_blkpref_ufs2()
1636 if (dtog(fs, prevbn + fs->fs_frag) >= fs->fs_ncg) in ffs_blkpref_ufs2()
1638 return (prevbn + fs->fs_frag); in ffs_blkpref_ufs2()
1661 struct fs *fs; in ffs_hashalloc() local
1670 fs = ITOFS(ip); in ffs_hashalloc()
1680 for (i = 1; i < fs->fs_ncg; i *= 2) { in ffs_hashalloc()
1682 if (cg >= fs->fs_ncg) in ffs_hashalloc()
1683 cg -= fs->fs_ncg; in ffs_hashalloc()
1693 cg = (icg + 2) % fs->fs_ncg; in ffs_hashalloc()
1694 for (i = 2; i < fs->fs_ncg; i++) { in ffs_hashalloc()
1699 if (cg == fs->fs_ncg) in ffs_hashalloc()
1718 struct fs *fs; in ffs_fragextend() local
1729 fs = ump->um_fs; in ffs_fragextend()
1730 if (fs->fs_cs(fs, cg).cs_nffree < numfrags(fs, nsize - osize)) in ffs_fragextend()
1732 frags = numfrags(fs, nsize); in ffs_fragextend()
1733 bbase = fragnum(fs, bprev); in ffs_fragextend()
1734 if (bbase > fragnum(fs, (bprev + frags - 1))) { in ffs_fragextend()
1739 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0) { in ffs_fragextend()
1740 ffs_checkcgintegrity(fs, cg, error); in ffs_fragextend()
1743 bno = dtogd(fs, bprev); in ffs_fragextend()
1745 for (i = numfrags(fs, osize); i < frags; i++) in ffs_fragextend()
1754 for (i = frags; i < fs->fs_frag - bbase; i++) in ffs_fragextend()
1757 cgp->cg_frsum[i - numfrags(fs, osize)]--; in ffs_fragextend()
1760 for (i = numfrags(fs, osize), nffree = 0; i < frags; i++) { in ffs_fragextend()
1766 fs->fs_cstotal.cs_nffree -= nffree; in ffs_fragextend()
1767 fs->fs_cs(fs, cg).cs_nffree -= nffree; in ffs_fragextend()
1768 fs->fs_fmod = 1; in ffs_fragextend()
1769 ACTIVECLEAR(fs, cg); in ffs_fragextend()
1773 frags, numfrags(fs, osize)); in ffs_fragextend()
1797 struct fs *fs; in ffs_alloccg() local
1807 fs = ump->um_fs; in ffs_alloccg()
1808 if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize) in ffs_alloccg()
1811 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0 || in ffs_alloccg()
1812 (cgp->cg_cs.cs_nbfree == 0 && size == fs->fs_bsize)) { in ffs_alloccg()
1813 ffs_checkcgintegrity(fs, cg, error); in ffs_alloccg()
1816 if (size == fs->fs_bsize) { in ffs_alloccg()
1819 ACTIVECLEAR(fs, cg); in ffs_alloccg()
1830 frags = numfrags(fs, size); in ffs_alloccg()
1831 for (allocsiz = frags; allocsiz < fs->fs_frag; allocsiz++) in ffs_alloccg()
1834 if (allocsiz == fs->fs_frag) { in ffs_alloccg()
1843 ACTIVECLEAR(fs, cg); in ffs_alloccg()
1850 bno = ffs_mapsearch(fs, cgp, bpref, allocsiz); in ffs_alloccg()
1860 fs->fs_cstotal.cs_nffree -= frags; in ffs_alloccg()
1861 fs->fs_cs(fs, cg).cs_nffree -= frags; in ffs_alloccg()
1862 fs->fs_fmod = 1; in ffs_alloccg()
1863 blkno = cgbase(fs, cg) + bno; in ffs_alloccg()
1864 ACTIVECLEAR(fs, cg); in ffs_alloccg()
1894 struct fs *fs; in ffs_alloccgblk() local
1903 fs = ump->um_fs; in ffs_alloccgblk()
1908 bpref = cgbase(fs, cgp->cg_cgx) + cgp->cg_rotor + fs->fs_frag; in ffs_alloccgblk()
1909 } else if ((cgbpref = dtog(fs, bpref)) != cgp->cg_cgx) { in ffs_alloccgblk()
1911 if (bpref < cgdata(fs, cgbpref)) in ffs_alloccgblk()
1912 bpref = cgmeta(fs, cgp->cg_cgx); in ffs_alloccgblk()
1914 bpref = cgdata(fs, cgp->cg_cgx); in ffs_alloccgblk()
1919 bno = dtogd(fs, blknum(fs, bpref)); in ffs_alloccgblk()
1920 if (ffs_isblock(fs, blksfree, fragstoblks(fs, bno))) in ffs_alloccgblk()
1925 bno = ffs_mapsearch(fs, cgp, bpref, (int)fs->fs_frag); in ffs_alloccgblk()
1929 if (bno >= dtogd(fs, cgdata(fs, cgp->cg_cgx))) in ffs_alloccgblk()
1932 blkno = fragstoblks(fs, bno); in ffs_alloccgblk()
1933 ffs_clrblock(fs, blksfree, (long)blkno); in ffs_alloccgblk()
1934 ffs_clusteracct(fs, cgp, blkno, -1); in ffs_alloccgblk()
1936 fs->fs_cstotal.cs_nbfree--; in ffs_alloccgblk()
1937 fs->fs_cs(fs, cgp->cg_cgx).cs_nbfree--; in ffs_alloccgblk()
1938 fs->fs_fmod = 1; in ffs_alloccgblk()
1939 blkno = cgbase(fs, cgp->cg_cgx) + bno; in ffs_alloccgblk()
1943 size = numfrags(fs, size); in ffs_alloccgblk()
1944 if (size != fs->fs_frag) { in ffs_alloccgblk()
1945 bno = dtogd(fs, blkno); in ffs_alloccgblk()
1946 for (i = size; i < fs->fs_frag; i++) in ffs_alloccgblk()
1948 i = fs->fs_frag - size; in ffs_alloccgblk()
1950 fs->fs_cstotal.cs_nffree += i; in ffs_alloccgblk()
1951 fs->fs_cs(fs, cgp->cg_cgx).cs_nffree += i; in ffs_alloccgblk()
1952 fs->fs_fmod = 1; in ffs_alloccgblk()
1976 struct fs *fs; in ffs_clusteralloc() local
1987 fs = ump->um_fs; in ffs_clusteralloc()
1988 MPASS(cg < fs->fs_ncg); in ffs_clusteralloc()
1989 if (fs->fs_maxcluster[cg] < len) in ffs_clusteralloc()
1992 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0) { in ffs_clusteralloc()
1993 ffs_checkcgintegrity(fs, cg, error); in ffs_clusteralloc()
2002 for (i = len; i <= fs->fs_contigsumsize; i++) in ffs_clusteralloc()
2005 if (i > fs->fs_contigsumsize) { in ffs_clusteralloc()
2018 fs->fs_maxcluster[cg] = i; in ffs_clusteralloc()
2033 if (dtog(fs, bpref) != cg) in ffs_clusteralloc()
2034 bpref = cgdata(fs, cg); in ffs_clusteralloc()
2036 bpref = blknum(fs, bpref); in ffs_clusteralloc()
2037 bpref = fragstoblks(fs, dtogd(fs, bpref)); in ffs_clusteralloc()
2066 if (!ffs_isblock(fs, blksfree, got - run + i)) in ffs_clusteralloc()
2068 bno = cgbase(fs, cg) + blkstofrags(fs, got - run + 1); in ffs_clusteralloc()
2069 if (dtog(fs, bno) != cg) in ffs_clusteralloc()
2071 len = blkstofrags(fs, len); in ffs_clusteralloc()
2073 for (i = 0; i < len; i += fs->fs_frag) in ffs_clusteralloc()
2074 if (ffs_alloccgblk(ip, bp, bno + i, fs->fs_bsize) != bno + i) in ffs_clusteralloc()
2076 ACTIVECLEAR(fs, cg); in ffs_clusteralloc()
2088 struct fs *fs; in getinobuf() local
2090 fs = ITOFS(ip); in getinobuf()
2091 return (getblk(ITODEVVP(ip), fsbtodb(fs, ino_to_fsba(fs, in getinobuf()
2092 cg * fs->fs_ipg + cginoblk)), (int)fs->fs_bsize, 0, 0, in getinobuf()
2122 struct fs *fs; in ffs_nodealloccg() local
2132 fs = ump->um_fs; in ffs_nodealloccg()
2134 if (fs->fs_cs(fs, cg).cs_nifree == 0) in ffs_nodealloccg()
2137 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0) { in ffs_nodealloccg()
2138 ffs_checkcgintegrity(fs, cg, error); in ffs_nodealloccg()
2150 ipref %= fs->fs_ipg; in ffs_nodealloccg()
2155 len = howmany(fs->fs_ipg - cgp->cg_irotor, NBBY); in ffs_nodealloccg()
2163 (intmax_t)cg, (long)cgp->cg_irotor, fs->fs_fsmnt); in ffs_nodealloccg()
2173 if (fs->fs_magic == FS_UFS2_MAGIC && in ffs_nodealloccg()
2174 ipref + INOPB(fs) > cgp->cg_initediblk && in ffs_nodealloccg()
2207 bzero(ibp->b_data, (int)fs->fs_bsize); in ffs_nodealloccg()
2209 for (i = 0; i < INOPB(fs); i++) { in ffs_nodealloccg()
2235 error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp); in ffs_nodealloccg()
2237 ACTIVECLEAR(fs, cg); in ffs_nodealloccg()
2242 cgp->cg_initediblk += INOPB(fs); in ffs_nodealloccg()
2247 ACTIVECLEAR(fs, cg); in ffs_nodealloccg()
2250 fs->fs_cstotal.cs_nifree--; in ffs_nodealloccg()
2251 fs->fs_cs(fs, cg).cs_nifree--; in ffs_nodealloccg()
2252 fs->fs_fmod = 1; in ffs_nodealloccg()
2255 fs->fs_cstotal.cs_ndir++; in ffs_nodealloccg()
2256 fs->fs_cs(fs, cg).cs_ndir++; in ffs_nodealloccg()
2260 softdep_setup_inomapdep(bp, ip, cg * fs->fs_ipg + ipref, mode); in ffs_nodealloccg()
2262 return ((ino_t)(cg * fs->fs_ipg + ipref)); in ffs_nodealloccg()
2274 struct fs *fs, in ffs_blkfree_cg() argument
2291 cg = dtog(fs, bno); in ffs_blkfree_cg()
2306 if ((uint64_t)size > fs->fs_bsize || fragoff(fs, size) != 0 || in ffs_blkfree_cg()
2307 fragnum(fs, bno) + numfrags(fs, size) > fs->fs_frag) { in ffs_blkfree_cg()
2309 devtoname(dev), (intmax_t)bno, (long)fs->fs_bsize, in ffs_blkfree_cg()
2310 size, fs->fs_fsmnt); in ffs_blkfree_cg()
2314 if ((uint64_t)bno >= fs->fs_size) { in ffs_blkfree_cg()
2317 ffs_fserr(fs, inum, "bad block"); in ffs_blkfree_cg()
2320 if ((error = ffs_getcg(fs, devvp, cg, GB_CVTENXIO, &bp, &cgp)) != 0) { in ffs_blkfree_cg()
2328 fs->fs_flags |= FS_NEEDSFSCK; in ffs_blkfree_cg()
2330 dbn = fragstoblks(fs, cgtod(fs, cg)); in ffs_blkfree_cg()
2332 dbn = fsbtodb(fs, cgtod(fs, cg)); in ffs_blkfree_cg()
2333 error = getblkx(devvp, dbn, dbn, fs->fs_cgsize, 0, 0, 0, &bp); in ffs_blkfree_cg()
2336 numfrags(fs, size), dephd, true); in ffs_blkfree_cg()
2342 cgbno = dtogd(fs, bno); in ffs_blkfree_cg()
2345 if (size == fs->fs_bsize) { in ffs_blkfree_cg()
2346 fragno = fragstoblks(fs, cgbno); in ffs_blkfree_cg()
2347 if (!ffs_isfreeblock(fs, blksfree, fragno)) { in ffs_blkfree_cg()
2355 devtoname(dev), (intmax_t)bno, fs->fs_fsmnt); in ffs_blkfree_cg()
2358 ffs_setblock(fs, blksfree, fragno); in ffs_blkfree_cg()
2359 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree_cg()
2361 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree_cg()
2362 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree_cg()
2364 bbase = cgbno - fragnum(fs, cgbno); in ffs_blkfree_cg()
2368 blk = blkmap(fs, blksfree, bbase); in ffs_blkfree_cg()
2369 ffs_fragacct(fs, blk, cgp->cg_frsum, -1); in ffs_blkfree_cg()
2373 frags = numfrags(fs, size); in ffs_blkfree_cg()
2378 fs->fs_fsmnt); in ffs_blkfree_cg()
2384 fs->fs_cstotal.cs_nffree += i; in ffs_blkfree_cg()
2385 fs->fs_cs(fs, cg).cs_nffree += i; in ffs_blkfree_cg()
2389 blk = blkmap(fs, blksfree, bbase); in ffs_blkfree_cg()
2390 ffs_fragacct(fs, blk, cgp->cg_frsum, 1); in ffs_blkfree_cg()
2394 fragno = fragstoblks(fs, bbase); in ffs_blkfree_cg()
2395 if (ffs_isblock(fs, blksfree, fragno)) { in ffs_blkfree_cg()
2396 cgp->cg_cs.cs_nffree -= fs->fs_frag; in ffs_blkfree_cg()
2397 fs->fs_cstotal.cs_nffree -= fs->fs_frag; in ffs_blkfree_cg()
2398 fs->fs_cs(fs, cg).cs_nffree -= fs->fs_frag; in ffs_blkfree_cg()
2399 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree_cg()
2401 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree_cg()
2402 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree_cg()
2405 fs->fs_fmod = 1; in ffs_blkfree_cg()
2406 ACTIVECLEAR(fs, cg); in ffs_blkfree_cg()
2411 numfrags(fs, size), dephd, false); in ffs_blkfree_cg()
2672 struct fs *fs, in ffs_blkfree() argument
2692 ffs_snapblkfree(fs, devvp, bno, size, inum, vtype, dephd)) { in ffs_blkfree()
2701 ffs_blkfree_cg(ump, fs, devvp, bno, size, inum, dephd); in ffs_blkfree()
2757 if (bno + numfrags(fs, size) == tp->bno) { in ffs_blkfree()
2762 } else if (bno == tp->bno + numfrags(fs, tp->size)) { in ffs_blkfree()
2782 struct fs *fs; in ffs_checkfreeblk() local
2789 fs = ITOFS(ip); in ffs_checkfreeblk()
2790 if ((uint64_t)size > fs->fs_bsize || fragoff(fs, size) != 0) { in ffs_checkfreeblk()
2792 (long)fs->fs_bsize, size, fs->fs_fsmnt); in ffs_checkfreeblk()
2795 if ((uint64_t)bno >= fs->fs_size) in ffs_checkfreeblk()
2797 if (ffs_getcg(fs, ITODEVVP(ip), dtog(fs, bno), 0, &bp, &cgp) != 0) in ffs_checkfreeblk()
2800 cgbno = dtogd(fs, bno); in ffs_checkfreeblk()
2801 if (size == fs->fs_bsize) { in ffs_checkfreeblk()
2802 blkalloced = ffs_isblock(fs, blksfree, fragstoblks(fs, cgbno)); in ffs_checkfreeblk()
2804 frags = numfrags(fs, size); in ffs_checkfreeblk()
2840 struct fs *fs, in ffs_freefile() argument
2855 cg = ino_to_cg(fs, ino); in ffs_freefile()
2867 if (ino >= fs->fs_ipg * fs->fs_ncg) in ffs_freefile()
2869 devtoname(dev), (uintmax_t)ino, fs->fs_fsmnt); in ffs_freefile()
2870 if ((error = ffs_getcg(fs, devvp, cg, GB_CVTENXIO, &bp, &cgp)) != 0) { in ffs_freefile()
2878 fs->fs_flags |= FS_NEEDSFSCK; in ffs_freefile()
2880 dbn = fragstoblks(fs, cgtod(fs, cg)); in ffs_freefile()
2882 dbn = fsbtodb(fs, cgtod(fs, cg)); in ffs_freefile()
2883 error = getblkx(devvp, dbn, dbn, fs->fs_cgsize, 0, 0, 0, &bp); in ffs_freefile()
2892 cgino = ino % fs->fs_ipg; in ffs_freefile()
2895 (uintmax_t)ino, fs->fs_fsmnt); in ffs_freefile()
2896 if (fs->fs_ronly == 0) in ffs_freefile()
2904 fs->fs_cstotal.cs_nifree++; in ffs_freefile()
2905 fs->fs_cs(fs, cg).cs_nifree++; in ffs_freefile()
2908 fs->fs_cstotal.cs_ndir--; in ffs_freefile()
2909 fs->fs_cs(fs, cg).cs_ndir--; in ffs_freefile()
2911 fs->fs_fmod = 1; in ffs_freefile()
2912 ACTIVECLEAR(fs, cg); in ffs_freefile()
2926 ffs_checkfreefile(struct fs *fs, in ffs_checkfreefile() argument
2936 cg = ino_to_cg(fs, ino); in ffs_checkfreefile()
2939 if (ino >= fs->fs_ipg * fs->fs_ncg) in ffs_checkfreefile()
2941 if ((error = ffs_getcg(fs, devvp, cg, 0, &bp, &cgp)) != 0) in ffs_checkfreefile()
2944 ino %= fs->fs_ipg; in ffs_checkfreefile()
2957 ffs_mapsearch(struct fs *fs, in ffs_mapsearch() argument
2972 start = dtogd(fs, bpref) / NBBY; in ffs_mapsearch()
2976 len = howmany(fs->fs_fpg, NBBY) - start; in ffs_mapsearch()
2978 fragtbl[fs->fs_frag], in ffs_mapsearch()
2979 (uint8_t)(1 << (allocsiz - 1 + (fs->fs_frag % NBBY)))); in ffs_mapsearch()
2984 fragtbl[fs->fs_frag], in ffs_mapsearch()
2985 (uint8_t)(1 << (allocsiz - 1 + (fs->fs_frag % NBBY)))); in ffs_mapsearch()
2988 start, len, fs->fs_fsmnt); in ffs_mapsearch()
2999 for (i = bno + NBBY; bno < i; bno += fs->fs_frag) { in ffs_mapsearch()
3000 blk = blkmap(fs, blksfree, bno); in ffs_mapsearch()
3004 for (pos = 0; pos <= fs->fs_frag - allocsiz; pos++) { in ffs_mapsearch()
3011 printf("bno = %ju, fs = %s\n", (intmax_t)bno, fs->fs_fsmnt); in ffs_mapsearch()
3020 ffs_getcg(struct fs *fs, in ffs_getcg() argument
3036 if ((fs->fs_metackhash & CK_CYLGRP) != 0) in ffs_getcg()
3039 blkno = fsbtodb(fs, cgtod(fs, cg)); in ffs_getcg()
3042 blkno = fragstoblks(fs, cgtod(fs, cg)); in ffs_getcg()
3045 error = breadn_flags(devvp, blkno, blkno, (int)fs->fs_cgsize, NULL, in ffs_getcg()
3050 if ((fs->fs_metackhash & CK_CYLGRP) != 0 && in ffs_getcg()
3097 if ((fs->fs_metackhash & CK_CYLGRP) != 0) in ffs_getcg()
3133 ffs_checkcgintegrity(struct fs *fs, in ffs_checkcgintegrity() argument
3140 fs->fs_cstotal.cs_nffree -= fs->fs_cs(fs, cg).cs_nffree; in ffs_checkcgintegrity()
3141 fs->fs_cs(fs, cg).cs_nffree = 0; in ffs_checkcgintegrity()
3142 fs->fs_cstotal.cs_nbfree -= fs->fs_cs(fs, cg).cs_nbfree; in ffs_checkcgintegrity()
3143 fs->fs_cs(fs, cg).cs_nbfree = 0; in ffs_checkcgintegrity()
3144 fs->fs_cstotal.cs_nifree -= fs->fs_cs(fs, cg).cs_nifree; in ffs_checkcgintegrity()
3145 fs->fs_cs(fs, cg).cs_nifree = 0; in ffs_checkcgintegrity()
3146 fs->fs_maxcluster[cg] = 0; in ffs_checkcgintegrity()
3147 fs->fs_flags |= FS_NEEDSFSCK; in ffs_checkcgintegrity()
3148 fs->fs_fmod = 1; in ffs_checkcgintegrity()
3158 ffs_fserr(struct fs *fs, in ffs_fserr() argument
3167 fs->fs_fsmnt, cp); in ffs_fserr()
3287 struct fs *fs; in sysctl_ffs_fsck() local
3323 fs = ump->um_fs; in sysctl_ffs_fsck()
3334 fs->fs_flags |= (long)cmd.value; in sysctl_ffs_fsck()
3336 fs->fs_flags &= ~(long)cmd.value; in sysctl_ffs_fsck()
3437 if ((error = ffs_freefile(ump, fs, ump->um_devvp, in sysctl_ffs_fsck()
3461 blksize = fs->fs_frag - (blkno % fs->fs_frag); in sysctl_ffs_fsck()
3466 ffs_blkfree(ump, fs, ump->um_devvp, blkno, in sysctl_ffs_fsck()
3467 blksize * fs->fs_fsize, UFS_ROOTINO, in sysctl_ffs_fsck()
3471 blksize = fs->fs_frag; in sysctl_ffs_fsck()
3487 fs->fs_cstotal.cs_ndir += cmd.value; in sysctl_ffs_fsck()
3497 fs->fs_cstotal.cs_nbfree += cmd.value; in sysctl_ffs_fsck()
3507 fs->fs_cstotal.cs_nifree += cmd.value; in sysctl_ffs_fsck()
3517 fs->fs_cstotal.cs_nffree += cmd.value; in sysctl_ffs_fsck()
3527 fs->fs_cstotal.cs_numclusters += cmd.value; in sysctl_ffs_fsck()