Lines Matching refs:fs
111 static void ffs_blkfree_cg(struct ufsmount *, struct fs *,
117 static void ffs_checkcgintegrity(struct fs *, uint64_t, int);
127 static ufs1_daddr_t ffs_mapsearch(struct fs *, struct cg *, ufs2_daddr_t, int);
160 struct fs *fs; in ffs_alloc() local
171 fs = ump->um_fs; in ffs_alloc()
174 if ((uint64_t)size > fs->fs_bsize || fragoff(fs, size) != 0) { in ffs_alloc()
176 devtoname(ump->um_dev), (long)fs->fs_bsize, size, in ffs_alloc()
177 fs->fs_fsmnt); in ffs_alloc()
192 if (size == fs->fs_bsize && fs->fs_cstotal.cs_nbfree == 0) in ffs_alloc()
195 freespace(fs, fs->fs_minfree) - numfrags(fs, size) < 0) in ffs_alloc()
197 if (bpref >= fs->fs_size) in ffs_alloc()
200 cg = ino_to_cg(fs, ip->i_number); in ffs_alloc()
202 cg = dtog(fs, bpref); in ffs_alloc()
225 softdep_request_cleanup(fs, ITOV(ip), cred, FLUSH_BLOCKS_WAIT); in ffs_alloc()
235 ffs_fserr(fs, ip->i_number, "filesystem full"); in ffs_alloc()
237 fs->fs_fsmnt); in ffs_alloc()
264 struct fs *fs; in ffs_realloccg() local
274 fs = ump->um_fs; in ffs_realloccg()
285 if ((uint64_t)osize > fs->fs_bsize || fragoff(fs, osize) != 0 || in ffs_realloccg()
286 (uint64_t)nsize > fs->fs_bsize || fragoff(fs, nsize) != 0) { in ffs_realloccg()
289 devtoname(ump->um_dev), (long)fs->fs_bsize, osize, in ffs_realloccg()
290 nsize, fs->fs_fsmnt); in ffs_realloccg()
299 freespace(fs, fs->fs_minfree) - numfrags(fs, nsize - osize) < 0) { in ffs_realloccg()
304 devtoname(ump->um_dev), (long)fs->fs_bsize, (intmax_t)bprev, in ffs_realloccg()
305 fs->fs_fsmnt); in ffs_realloccg()
320 bp->b_blkno = fsbtodb(fs, bprev); in ffs_realloccg()
334 cg = dtog(fs, bprev); in ffs_realloccg()
338 if (bp->b_blkno != fsbtodb(fs, bno)) in ffs_realloccg()
357 if (bpref >= fs->fs_size) in ffs_realloccg()
359 switch ((int)fs->fs_optim) { in ffs_realloccg()
369 if (fs->fs_minfree <= 5 || in ffs_realloccg()
370 fs->fs_cstotal.cs_nffree > in ffs_realloccg()
371 (off_t)fs->fs_dsize * fs->fs_minfree / (2 * 100)) in ffs_realloccg()
374 fs->fs_fsmnt); in ffs_realloccg()
375 fs->fs_optim = FS_OPTTIME; in ffs_realloccg()
388 request = fs->fs_bsize; in ffs_realloccg()
389 if (fs->fs_cstotal.cs_nffree < in ffs_realloccg()
390 (off_t)fs->fs_dsize * (fs->fs_minfree - 2) / 100) in ffs_realloccg()
393 fs->fs_fsmnt); in ffs_realloccg()
394 fs->fs_optim = FS_OPTSPACE; in ffs_realloccg()
398 devtoname(ump->um_dev), (long)fs->fs_optim, fs->fs_fsmnt); in ffs_realloccg()
404 bp->b_blkno = fsbtodb(fs, bno); in ffs_realloccg()
420 ffs_blkfree(ump, fs, ump->um_devvp, bprev, (long)osize, in ffs_realloccg()
458 softdep_request_cleanup(fs, vp, cred, FLUSH_BLOCKS_WAIT); in ffs_realloccg()
470 ffs_fserr(fs, ip->i_number, "filesystem full"); in ffs_realloccg()
472 fs->fs_fsmnt); in ffs_realloccg()
571 struct fs *fs; in ffs_reallocblks_ufs1() local
587 fs = ump->um_fs; in ffs_reallocblks_ufs1()
594 if (fs->fs_contigsumsize <= 0 || freespace(fs, 4) < 0) in ffs_reallocblks_ufs1()
603 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs1()
609 ssize = fsbtodb(fs, fs->fs_frag); in ffs_reallocblks_ufs1()
631 if (dtog(fs, dbtofsb(fs, buflist->bs_children[0]->b_blkno)) != in ffs_reallocblks_ufs1()
632 dtog(fs, dbtofsb(fs, buflist->bs_children[len - 1]->b_blkno))) in ffs_reallocblks_ufs1()
645 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &sbp)) { in ffs_reallocblks_ufs1()
665 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &ebp)) in ffs_reallocblks_ufs1()
679 pref = cgdata(fs, ip->i_nextclustercg); in ffs_reallocblks_ufs1()
685 cg = dtog(fs, pref); in ffs_reallocblks_ufs1()
686 for (i = min(maxclustersearch, fs->fs_ncg); i > 0; i--) { in ffs_reallocblks_ufs1()
690 if (cg >= fs->fs_ncg) in ffs_reallocblks_ufs1()
717 for (bap = &sbap[soff], i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs1()
724 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs1()
726 if (dbtofsb(fs, buflist->bs_children[i]->b_blkno) != *bap) in ffs_reallocblks_ufs1()
736 blkno, *bap, fs->fs_bsize, fs->fs_bsize, in ffs_reallocblks_ufs1()
782 for (blkno = newblk, i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs1()
799 ffs_blkfree(ump, fs, ump->um_devvp, in ffs_reallocblks_ufs1()
800 dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs1()
801 fs->fs_bsize, ip->i_number, vp->v_type, NULL, in ffs_reallocblks_ufs1()
804 bp->b_blkno = fsbtodb(fs, blkno); in ffs_reallocblks_ufs1()
806 if (!ffs_checkfreeblk(ip, dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs1()
807 fs->fs_bsize)) in ffs_reallocblks_ufs1()
838 struct fs *fs; in ffs_reallocblks_ufs2() local
853 fs = ump->um_fs; in ffs_reallocblks_ufs2()
860 if (fs->fs_contigsumsize <= 0 || freespace(fs, 4) < 0) in ffs_reallocblks_ufs2()
869 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs2()
875 ssize = fsbtodb(fs, fs->fs_frag); in ffs_reallocblks_ufs2()
897 if (dtog(fs, dbtofsb(fs, buflist->bs_children[0]->b_blkno)) != in ffs_reallocblks_ufs2()
898 dtog(fs, dbtofsb(fs, buflist->bs_children[len - 1]->b_blkno))) in ffs_reallocblks_ufs2()
911 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &sbp)) { in ffs_reallocblks_ufs2()
931 if (bread(vp, idp->in_lbn, (int)fs->fs_bsize, NOCRED, &ebp)) in ffs_reallocblks_ufs2()
945 pref = cgdata(fs, ip->i_nextclustercg); in ffs_reallocblks_ufs2()
951 cg = dtog(fs, pref); in ffs_reallocblks_ufs2()
952 for (i = min(maxclustersearch, fs->fs_ncg); i > 0; i--) { in ffs_reallocblks_ufs2()
956 if (cg >= fs->fs_ncg) in ffs_reallocblks_ufs2()
982 for (bap = &sbap[soff], i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs2()
989 dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize)) in ffs_reallocblks_ufs2()
991 if (dbtofsb(fs, buflist->bs_children[i]->b_blkno) != *bap) in ffs_reallocblks_ufs2()
1001 blkno, *bap, fs->fs_bsize, fs->fs_bsize, in ffs_reallocblks_ufs2()
1047 for (blkno = newblk, i = 0; i < len; i++, blkno += fs->fs_frag) { in ffs_reallocblks_ufs2()
1064 ffs_blkfree(ump, fs, ump->um_devvp, in ffs_reallocblks_ufs2()
1065 dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs2()
1066 fs->fs_bsize, ip->i_number, vp->v_type, NULL, in ffs_reallocblks_ufs2()
1069 bp->b_blkno = fsbtodb(fs, blkno); in ffs_reallocblks_ufs2()
1071 if (!ffs_checkfreeblk(ip, dbtofsb(fs, bp->b_blkno), in ffs_reallocblks_ufs2()
1072 fs->fs_bsize)) in ffs_reallocblks_ufs2()
1118 struct fs *fs; in ffs_valloc() local
1129 fs = ump->um_fs; in ffs_valloc()
1134 if (fs->fs_cstotal.cs_nifree == 0) in ffs_valloc()
1141 if (ipref >= fs->fs_ncg * fs->fs_ipg) in ffs_valloc()
1143 cg = ino_to_cg(fs, ipref); in ffs_valloc()
1149 if (fs->fs_contigdirs[cg] < 255) in ffs_valloc()
1150 fs->fs_contigdirs[cg]++; in ffs_valloc()
1152 if (fs->fs_contigdirs[cg] > 0) in ffs_valloc()
1153 fs->fs_contigdirs[cg]--; in ffs_valloc()
1175 ip->i_mode, (uintmax_t)ip->i_number, fs->fs_fsmnt); in ffs_valloc()
1178 if (DIP(ip, i_blocks) && (fs->fs_flags & FS_UNCLEAN) == 0) { /* XXX */ in ffs_valloc()
1180 fs->fs_fsmnt, (intmax_t)ino, (long)DIP(ip, i_blocks)); in ffs_valloc()
1193 if (fs->fs_magic == FS_UFS2_MAGIC) { in ffs_valloc()
1201 if (fs->fs_magic == FS_UFS2_MAGIC) { in ffs_valloc()
1211 softdep_request_cleanup(fs, pvp, cred, FLUSH_INODES_WAIT); in ffs_valloc()
1220 ffs_fserr(fs, pip->i_number, "out of inodes"); in ffs_valloc()
1222 fs->fs_fsmnt); in ffs_valloc()
1245 struct fs *fs; in ffs_dirpref() local
1253 fs = ITOFS(pip); in ffs_dirpref()
1255 avgifree = fs->fs_cstotal.cs_nifree / fs->fs_ncg; in ffs_dirpref()
1256 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_dirpref()
1257 avgndir = fs->fs_cstotal.cs_ndir / fs->fs_ncg; in ffs_dirpref()
1278 range = fs->fs_ncg / (1 << depth); in ffs_dirpref()
1279 curcg = ino_to_cg(fs, pip->i_number); in ffs_dirpref()
1282 start += fs->fs_ncg; in ffs_dirpref()
1284 if (end >= fs->fs_ncg) in ffs_dirpref()
1285 end -= fs->fs_ncg; in ffs_dirpref()
1292 prefcg += fs->fs_ncg; in ffs_dirpref()
1293 if (prefcg >= fs->fs_ncg) in ffs_dirpref()
1294 prefcg -= fs->fs_ncg; in ffs_dirpref()
1306 maxndir = min(avgndir + (1 << depth), fs->fs_ipg); in ffs_dirpref()
1313 cgsize = fs->fs_fsize * fs->fs_fpg; in ffs_dirpref()
1314 dirsize = fs->fs_avgfilesize * fs->fs_avgfpdir; in ffs_dirpref()
1315 curdirsize = avgndir ? (cgsize - avgbfree * fs->fs_bsize) / avgndir : 0; in ffs_dirpref()
1321 maxcontigdirs = min((avgbfree * fs->fs_bsize) / dirsize, 255); in ffs_dirpref()
1322 if (fs->fs_avgfpdir > 0) in ffs_dirpref()
1324 fs->fs_ipg / fs->fs_avgfpdir); in ffs_dirpref()
1350 for (cg = prefcg; cg < fs->fs_ncg; cg++) in ffs_dirpref()
1351 if (fs->fs_cs(fs, cg).cs_ndir < maxndir && in ffs_dirpref()
1352 fs->fs_cs(fs, cg).cs_nifree >= minifree && in ffs_dirpref()
1353 fs->fs_cs(fs, cg).cs_nbfree >= minbfree) { in ffs_dirpref()
1354 if (fs->fs_contigdirs[cg] < maxcontigdirs) in ffs_dirpref()
1355 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1358 if (fs->fs_cs(fs, cg).cs_ndir < maxndir && in ffs_dirpref()
1359 fs->fs_cs(fs, cg).cs_nifree >= minifree && in ffs_dirpref()
1360 fs->fs_cs(fs, cg).cs_nbfree >= minbfree) { in ffs_dirpref()
1361 if (fs->fs_contigdirs[cg] < maxcontigdirs) in ffs_dirpref()
1362 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1367 for (cg = prefcg; cg < fs->fs_ncg; cg++) in ffs_dirpref()
1368 if (fs->fs_cs(fs, cg).cs_nifree >= avgifree) in ffs_dirpref()
1369 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1371 if (fs->fs_cs(fs, cg).cs_nifree >= avgifree) in ffs_dirpref()
1373 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
1411 struct fs *fs; in ffs_blkpref_ufs1() local
1418 fs = ITOFS(ip); in ffs_blkpref_ufs1()
1430 inocg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs1()
1437 pref = cgmeta(fs, inocg); in ffs_blkpref_ufs1()
1442 if (indx == -1 && lbn < UFS_NDADDR + NINDIR(fs) && in ffs_blkpref_ufs1()
1444 pref = ip->i_din1->di_db[UFS_NDADDR - 1] + fs->fs_frag; in ffs_blkpref_ufs1()
1454 if (pref != 0 && pref >= cgdata(fs, inocg) && in ffs_blkpref_ufs1()
1455 pref < cgbase(fs, inocg + 1)) in ffs_blkpref_ufs1()
1456 return (pref + fs->fs_frag); in ffs_blkpref_ufs1()
1469 fs->fs_bsize) != 0) in ffs_blkpref_ufs1()
1472 if (indx % fs->fs_maxbpg == 0 || prevbn == 0) { in ffs_blkpref_ufs1()
1478 return (cgmeta(fs, inocg)); in ffs_blkpref_ufs1()
1484 if (lbn < UFS_NDADDR + NINDIR(fs)) in ffs_blkpref_ufs1()
1485 return (cgdata(fs, inocg)); in ffs_blkpref_ufs1()
1491 startcg = inocg + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs1()
1493 startcg = dtog(fs, prevbn) + 1; in ffs_blkpref_ufs1()
1494 startcg %= fs->fs_ncg; in ffs_blkpref_ufs1()
1495 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs1()
1496 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs1()
1497 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs1()
1498 fs->fs_cgrotor = cg; in ffs_blkpref_ufs1()
1499 return (cgdata(fs, 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()
1511 return (prevbn + fs->fs_frag); in ffs_blkpref_ufs1()
1523 struct fs *fs; in ffs_blkpref_ufs2() local
1530 fs = ITOFS(ip); in ffs_blkpref_ufs2()
1542 inocg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs2()
1549 pref = cgmeta(fs, inocg); in ffs_blkpref_ufs2()
1554 if (indx == -1 && lbn < UFS_NDADDR + NINDIR(fs) && in ffs_blkpref_ufs2()
1556 pref = ip->i_din2->di_db[UFS_NDADDR - 1] + fs->fs_frag; in ffs_blkpref_ufs2()
1566 if (pref != 0 && pref >= cgdata(fs, inocg) && in ffs_blkpref_ufs2()
1567 pref < cgbase(fs, inocg + 1)) in ffs_blkpref_ufs2()
1568 return (pref + fs->fs_frag); in ffs_blkpref_ufs2()
1581 fs->fs_bsize) != 0) in ffs_blkpref_ufs2()
1584 if (indx % fs->fs_maxbpg == 0 || prevbn == 0) { in ffs_blkpref_ufs2()
1590 return (cgmeta(fs, inocg)); in ffs_blkpref_ufs2()
1596 if (lbn < UFS_NDADDR + NINDIR(fs)) in ffs_blkpref_ufs2()
1597 return (cgdata(fs, inocg)); in ffs_blkpref_ufs2()
1603 startcg = inocg + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs2()
1605 startcg = dtog(fs, prevbn) + 1; in ffs_blkpref_ufs2()
1606 startcg %= fs->fs_ncg; in ffs_blkpref_ufs2()
1607 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs2()
1608 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs2()
1609 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
1610 fs->fs_cgrotor = cg; in ffs_blkpref_ufs2()
1611 return (cgdata(fs, cg)); in ffs_blkpref_ufs2()
1614 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
1615 fs->fs_cgrotor = cg; in ffs_blkpref_ufs2()
1616 return (cgdata(fs, cg)); in ffs_blkpref_ufs2()
1623 return (prevbn + fs->fs_frag); in ffs_blkpref_ufs2()
1646 struct fs *fs; in ffs_hashalloc() local
1655 fs = ITOFS(ip); in ffs_hashalloc()
1665 for (i = 1; i < fs->fs_ncg; i *= 2) { in ffs_hashalloc()
1667 if (cg >= fs->fs_ncg) in ffs_hashalloc()
1668 cg -= fs->fs_ncg; in ffs_hashalloc()
1678 cg = (icg + 2) % fs->fs_ncg; in ffs_hashalloc()
1679 for (i = 2; i < fs->fs_ncg; i++) { in ffs_hashalloc()
1684 if (cg == fs->fs_ncg) in ffs_hashalloc()
1703 struct fs *fs; in ffs_fragextend() local
1714 fs = ump->um_fs; in ffs_fragextend()
1715 if (fs->fs_cs(fs, cg).cs_nffree < numfrags(fs, nsize - osize)) in ffs_fragextend()
1717 frags = numfrags(fs, nsize); in ffs_fragextend()
1718 bbase = fragnum(fs, bprev); in ffs_fragextend()
1719 if (bbase > fragnum(fs, (bprev + frags - 1))) { in ffs_fragextend()
1724 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0) { in ffs_fragextend()
1725 ffs_checkcgintegrity(fs, cg, error); in ffs_fragextend()
1728 bno = dtogd(fs, bprev); in ffs_fragextend()
1730 for (i = numfrags(fs, osize); i < frags; i++) in ffs_fragextend()
1739 for (i = frags; i < fs->fs_frag - bbase; i++) in ffs_fragextend()
1742 cgp->cg_frsum[i - numfrags(fs, osize)]--; in ffs_fragextend()
1745 for (i = numfrags(fs, osize), nffree = 0; i < frags; i++) { in ffs_fragextend()
1751 fs->fs_cstotal.cs_nffree -= nffree; in ffs_fragextend()
1752 fs->fs_cs(fs, cg).cs_nffree -= nffree; in ffs_fragextend()
1753 fs->fs_fmod = 1; in ffs_fragextend()
1754 ACTIVECLEAR(fs, cg); in ffs_fragextend()
1758 frags, numfrags(fs, osize)); in ffs_fragextend()
1782 struct fs *fs; in ffs_alloccg() local
1792 fs = ump->um_fs; in ffs_alloccg()
1793 if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize) in ffs_alloccg()
1796 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0 || in ffs_alloccg()
1797 (cgp->cg_cs.cs_nbfree == 0 && size == fs->fs_bsize)) { in ffs_alloccg()
1798 ffs_checkcgintegrity(fs, cg, error); in ffs_alloccg()
1801 if (size == fs->fs_bsize) { in ffs_alloccg()
1804 ACTIVECLEAR(fs, cg); in ffs_alloccg()
1815 frags = numfrags(fs, size); in ffs_alloccg()
1816 for (allocsiz = frags; allocsiz < fs->fs_frag; allocsiz++) in ffs_alloccg()
1819 if (allocsiz == fs->fs_frag) { in ffs_alloccg()
1828 ACTIVECLEAR(fs, cg); in ffs_alloccg()
1835 bno = ffs_mapsearch(fs, cgp, bpref, allocsiz); in ffs_alloccg()
1845 fs->fs_cstotal.cs_nffree -= frags; in ffs_alloccg()
1846 fs->fs_cs(fs, cg).cs_nffree -= frags; in ffs_alloccg()
1847 fs->fs_fmod = 1; in ffs_alloccg()
1848 blkno = cgbase(fs, cg) + bno; in ffs_alloccg()
1849 ACTIVECLEAR(fs, cg); in ffs_alloccg()
1879 struct fs *fs; in ffs_alloccgblk() local
1888 fs = ump->um_fs; in ffs_alloccgblk()
1893 bpref = cgbase(fs, cgp->cg_cgx) + cgp->cg_rotor + fs->fs_frag; in ffs_alloccgblk()
1894 } else if ((cgbpref = dtog(fs, bpref)) != cgp->cg_cgx) { in ffs_alloccgblk()
1896 if (bpref < cgdata(fs, cgbpref)) in ffs_alloccgblk()
1897 bpref = cgmeta(fs, cgp->cg_cgx); in ffs_alloccgblk()
1899 bpref = cgdata(fs, cgp->cg_cgx); in ffs_alloccgblk()
1904 bno = dtogd(fs, blknum(fs, bpref)); in ffs_alloccgblk()
1905 if (ffs_isblock(fs, blksfree, fragstoblks(fs, bno))) in ffs_alloccgblk()
1910 bno = ffs_mapsearch(fs, cgp, bpref, (int)fs->fs_frag); in ffs_alloccgblk()
1914 if (bno >= dtogd(fs, cgdata(fs, cgp->cg_cgx))) in ffs_alloccgblk()
1917 blkno = fragstoblks(fs, bno); in ffs_alloccgblk()
1918 ffs_clrblock(fs, blksfree, (long)blkno); in ffs_alloccgblk()
1919 ffs_clusteracct(fs, cgp, blkno, -1); in ffs_alloccgblk()
1921 fs->fs_cstotal.cs_nbfree--; in ffs_alloccgblk()
1922 fs->fs_cs(fs, cgp->cg_cgx).cs_nbfree--; in ffs_alloccgblk()
1923 fs->fs_fmod = 1; in ffs_alloccgblk()
1924 blkno = cgbase(fs, cgp->cg_cgx) + bno; in ffs_alloccgblk()
1928 size = numfrags(fs, size); in ffs_alloccgblk()
1929 if (size != fs->fs_frag) { in ffs_alloccgblk()
1930 bno = dtogd(fs, blkno); in ffs_alloccgblk()
1931 for (i = size; i < fs->fs_frag; i++) in ffs_alloccgblk()
1933 i = fs->fs_frag - size; in ffs_alloccgblk()
1935 fs->fs_cstotal.cs_nffree += i; in ffs_alloccgblk()
1936 fs->fs_cs(fs, cgp->cg_cgx).cs_nffree += i; in ffs_alloccgblk()
1937 fs->fs_fmod = 1; in ffs_alloccgblk()
1961 struct fs *fs; in ffs_clusteralloc() local
1972 fs = ump->um_fs; in ffs_clusteralloc()
1973 if (fs->fs_maxcluster[cg] < len) in ffs_clusteralloc()
1976 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0) { in ffs_clusteralloc()
1977 ffs_checkcgintegrity(fs, cg, error); in ffs_clusteralloc()
1986 for (i = len; i <= fs->fs_contigsumsize; i++) in ffs_clusteralloc()
1989 if (i > fs->fs_contigsumsize) { in ffs_clusteralloc()
2002 fs->fs_maxcluster[cg] = i; in ffs_clusteralloc()
2017 if (dtog(fs, bpref) != cg) in ffs_clusteralloc()
2018 bpref = cgdata(fs, cg); in ffs_clusteralloc()
2020 bpref = blknum(fs, bpref); in ffs_clusteralloc()
2021 bpref = fragstoblks(fs, dtogd(fs, bpref)); in ffs_clusteralloc()
2050 if (!ffs_isblock(fs, blksfree, got - run + i)) in ffs_clusteralloc()
2052 bno = cgbase(fs, cg) + blkstofrags(fs, got - run + 1); in ffs_clusteralloc()
2053 if (dtog(fs, bno) != cg) in ffs_clusteralloc()
2055 len = blkstofrags(fs, len); in ffs_clusteralloc()
2057 for (i = 0; i < len; i += fs->fs_frag) in ffs_clusteralloc()
2058 if (ffs_alloccgblk(ip, bp, bno + i, fs->fs_bsize) != bno + i) in ffs_clusteralloc()
2060 ACTIVECLEAR(fs, cg); in ffs_clusteralloc()
2072 struct fs *fs; in getinobuf() local
2074 fs = ITOFS(ip); in getinobuf()
2075 return (getblk(ITODEVVP(ip), fsbtodb(fs, ino_to_fsba(fs, in getinobuf()
2076 cg * fs->fs_ipg + cginoblk)), (int)fs->fs_bsize, 0, 0, in getinobuf()
2106 struct fs *fs; in ffs_nodealloccg() local
2116 fs = ump->um_fs; in ffs_nodealloccg()
2118 if (fs->fs_cs(fs, cg).cs_nifree == 0) in ffs_nodealloccg()
2121 if ((error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp)) != 0) { in ffs_nodealloccg()
2122 ffs_checkcgintegrity(fs, cg, error); in ffs_nodealloccg()
2134 ipref %= fs->fs_ipg; in ffs_nodealloccg()
2139 len = howmany(fs->fs_ipg - cgp->cg_irotor, NBBY); in ffs_nodealloccg()
2147 (intmax_t)cg, (long)cgp->cg_irotor, fs->fs_fsmnt); in ffs_nodealloccg()
2157 if (fs->fs_magic == FS_UFS2_MAGIC && in ffs_nodealloccg()
2158 ipref + INOPB(fs) > cgp->cg_initediblk && in ffs_nodealloccg()
2191 bzero(ibp->b_data, (int)fs->fs_bsize); in ffs_nodealloccg()
2193 for (i = 0; i < INOPB(fs); i++) { in ffs_nodealloccg()
2219 error = ffs_getcg(fs, ump->um_devvp, cg, 0, &bp, &cgp); in ffs_nodealloccg()
2221 ACTIVECLEAR(fs, cg); in ffs_nodealloccg()
2226 cgp->cg_initediblk += INOPB(fs); in ffs_nodealloccg()
2231 ACTIVECLEAR(fs, cg); in ffs_nodealloccg()
2234 fs->fs_cstotal.cs_nifree--; in ffs_nodealloccg()
2235 fs->fs_cs(fs, cg).cs_nifree--; in ffs_nodealloccg()
2236 fs->fs_fmod = 1; in ffs_nodealloccg()
2239 fs->fs_cstotal.cs_ndir++; in ffs_nodealloccg()
2240 fs->fs_cs(fs, cg).cs_ndir++; in ffs_nodealloccg()
2244 softdep_setup_inomapdep(bp, ip, cg * fs->fs_ipg + ipref, mode); in ffs_nodealloccg()
2246 return ((ino_t)(cg * fs->fs_ipg + ipref)); in ffs_nodealloccg()
2258 struct fs *fs, in ffs_blkfree_cg() argument
2275 cg = dtog(fs, bno); in ffs_blkfree_cg()
2290 if ((uint64_t)size > fs->fs_bsize || fragoff(fs, size) != 0 || in ffs_blkfree_cg()
2291 fragnum(fs, bno) + numfrags(fs, size) > fs->fs_frag) { in ffs_blkfree_cg()
2293 devtoname(dev), (intmax_t)bno, (long)fs->fs_bsize, in ffs_blkfree_cg()
2294 size, fs->fs_fsmnt); in ffs_blkfree_cg()
2298 if ((uint64_t)bno >= fs->fs_size) { in ffs_blkfree_cg()
2301 ffs_fserr(fs, inum, "bad block"); in ffs_blkfree_cg()
2304 if ((error = ffs_getcg(fs, devvp, cg, GB_CVTENXIO, &bp, &cgp)) != 0) { in ffs_blkfree_cg()
2312 fs->fs_flags |= FS_NEEDSFSCK; in ffs_blkfree_cg()
2314 dbn = fragstoblks(fs, cgtod(fs, cg)); in ffs_blkfree_cg()
2316 dbn = fsbtodb(fs, cgtod(fs, cg)); in ffs_blkfree_cg()
2317 error = getblkx(devvp, dbn, dbn, fs->fs_cgsize, 0, 0, 0, &bp); in ffs_blkfree_cg()
2320 numfrags(fs, size), dephd, true); in ffs_blkfree_cg()
2326 cgbno = dtogd(fs, bno); in ffs_blkfree_cg()
2329 if (size == fs->fs_bsize) { in ffs_blkfree_cg()
2330 fragno = fragstoblks(fs, cgbno); in ffs_blkfree_cg()
2331 if (!ffs_isfreeblock(fs, blksfree, fragno)) { in ffs_blkfree_cg()
2339 devtoname(dev), (intmax_t)bno, fs->fs_fsmnt); in ffs_blkfree_cg()
2342 ffs_setblock(fs, blksfree, fragno); in ffs_blkfree_cg()
2343 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree_cg()
2345 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree_cg()
2346 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree_cg()
2348 bbase = cgbno - fragnum(fs, cgbno); in ffs_blkfree_cg()
2352 blk = blkmap(fs, blksfree, bbase); in ffs_blkfree_cg()
2353 ffs_fragacct(fs, blk, cgp->cg_frsum, -1); in ffs_blkfree_cg()
2357 frags = numfrags(fs, size); in ffs_blkfree_cg()
2362 fs->fs_fsmnt); in ffs_blkfree_cg()
2368 fs->fs_cstotal.cs_nffree += i; in ffs_blkfree_cg()
2369 fs->fs_cs(fs, cg).cs_nffree += i; in ffs_blkfree_cg()
2373 blk = blkmap(fs, blksfree, bbase); in ffs_blkfree_cg()
2374 ffs_fragacct(fs, blk, cgp->cg_frsum, 1); in ffs_blkfree_cg()
2378 fragno = fragstoblks(fs, bbase); in ffs_blkfree_cg()
2379 if (ffs_isblock(fs, blksfree, fragno)) { in ffs_blkfree_cg()
2380 cgp->cg_cs.cs_nffree -= fs->fs_frag; in ffs_blkfree_cg()
2381 fs->fs_cstotal.cs_nffree -= fs->fs_frag; in ffs_blkfree_cg()
2382 fs->fs_cs(fs, cg).cs_nffree -= fs->fs_frag; in ffs_blkfree_cg()
2383 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree_cg()
2385 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree_cg()
2386 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree_cg()
2389 fs->fs_fmod = 1; in ffs_blkfree_cg()
2390 ACTIVECLEAR(fs, cg); in ffs_blkfree_cg()
2395 numfrags(fs, size), dephd, false); in ffs_blkfree_cg()
2656 struct fs *fs, in ffs_blkfree() argument
2676 ffs_snapblkfree(fs, devvp, bno, size, inum, vtype, dephd)) { in ffs_blkfree()
2685 ffs_blkfree_cg(ump, fs, devvp, bno, size, inum, dephd); in ffs_blkfree()
2741 if (bno + numfrags(fs, size) == tp->bno) { in ffs_blkfree()
2746 } else if (bno == tp->bno + numfrags(fs, tp->size)) { in ffs_blkfree()
2766 struct fs *fs; in ffs_checkfreeblk() local
2773 fs = ITOFS(ip); in ffs_checkfreeblk()
2774 if ((uint64_t)size > fs->fs_bsize || fragoff(fs, size) != 0) { in ffs_checkfreeblk()
2776 (long)fs->fs_bsize, size, fs->fs_fsmnt); in ffs_checkfreeblk()
2779 if ((uint64_t)bno >= fs->fs_size) in ffs_checkfreeblk()
2781 if (ffs_getcg(fs, ITODEVVP(ip), dtog(fs, bno), 0, &bp, &cgp) != 0) in ffs_checkfreeblk()
2784 cgbno = dtogd(fs, bno); in ffs_checkfreeblk()
2785 if (size == fs->fs_bsize) { in ffs_checkfreeblk()
2786 blkalloced = ffs_isblock(fs, blksfree, fragstoblks(fs, cgbno)); in ffs_checkfreeblk()
2788 frags = numfrags(fs, size); in ffs_checkfreeblk()
2824 struct fs *fs, in ffs_freefile() argument
2839 cg = ino_to_cg(fs, ino); in ffs_freefile()
2851 if (ino >= fs->fs_ipg * fs->fs_ncg) in ffs_freefile()
2853 devtoname(dev), (uintmax_t)ino, fs->fs_fsmnt); in ffs_freefile()
2854 if ((error = ffs_getcg(fs, devvp, cg, GB_CVTENXIO, &bp, &cgp)) != 0) { in ffs_freefile()
2862 fs->fs_flags |= FS_NEEDSFSCK; in ffs_freefile()
2864 dbn = fragstoblks(fs, cgtod(fs, cg)); in ffs_freefile()
2866 dbn = fsbtodb(fs, cgtod(fs, cg)); in ffs_freefile()
2867 error = getblkx(devvp, dbn, dbn, fs->fs_cgsize, 0, 0, 0, &bp); in ffs_freefile()
2876 cgino = ino % fs->fs_ipg; in ffs_freefile()
2879 (uintmax_t)ino, fs->fs_fsmnt); in ffs_freefile()
2880 if (fs->fs_ronly == 0) in ffs_freefile()
2888 fs->fs_cstotal.cs_nifree++; in ffs_freefile()
2889 fs->fs_cs(fs, cg).cs_nifree++; in ffs_freefile()
2892 fs->fs_cstotal.cs_ndir--; in ffs_freefile()
2893 fs->fs_cs(fs, cg).cs_ndir--; in ffs_freefile()
2895 fs->fs_fmod = 1; in ffs_freefile()
2896 ACTIVECLEAR(fs, cg); in ffs_freefile()
2910 ffs_checkfreefile(struct fs *fs, in ffs_checkfreefile() argument
2920 cg = ino_to_cg(fs, ino); in ffs_checkfreefile()
2923 if (ino >= fs->fs_ipg * fs->fs_ncg) in ffs_checkfreefile()
2925 if ((error = ffs_getcg(fs, devvp, cg, 0, &bp, &cgp)) != 0) in ffs_checkfreefile()
2928 ino %= fs->fs_ipg; in ffs_checkfreefile()
2941 ffs_mapsearch(struct fs *fs, in ffs_mapsearch() argument
2956 start = dtogd(fs, bpref) / NBBY; in ffs_mapsearch()
2960 len = howmany(fs->fs_fpg, NBBY) - start; in ffs_mapsearch()
2962 fragtbl[fs->fs_frag], in ffs_mapsearch()
2963 (uint8_t)(1 << (allocsiz - 1 + (fs->fs_frag % NBBY)))); in ffs_mapsearch()
2968 fragtbl[fs->fs_frag], in ffs_mapsearch()
2969 (uint8_t)(1 << (allocsiz - 1 + (fs->fs_frag % NBBY)))); in ffs_mapsearch()
2972 start, len, fs->fs_fsmnt); in ffs_mapsearch()
2983 for (i = bno + NBBY; bno < i; bno += fs->fs_frag) { in ffs_mapsearch()
2984 blk = blkmap(fs, blksfree, bno); in ffs_mapsearch()
2988 for (pos = 0; pos <= fs->fs_frag - allocsiz; pos++) { in ffs_mapsearch()
2995 printf("bno = %ju, fs = %s\n", (intmax_t)bno, fs->fs_fsmnt); in ffs_mapsearch()
3004 ffs_getcg(struct fs *fs, in ffs_getcg() argument
3020 if ((fs->fs_metackhash & CK_CYLGRP) != 0) in ffs_getcg()
3023 blkno = fsbtodb(fs, cgtod(fs, cg)); in ffs_getcg()
3026 blkno = fragstoblks(fs, cgtod(fs, cg)); in ffs_getcg()
3029 error = breadn_flags(devvp, blkno, blkno, (int)fs->fs_cgsize, NULL, in ffs_getcg()
3034 if ((fs->fs_metackhash & CK_CYLGRP) != 0 && in ffs_getcg()
3081 if ((fs->fs_metackhash & CK_CYLGRP) != 0) in ffs_getcg()
3117 ffs_checkcgintegrity(struct fs *fs, in ffs_checkcgintegrity() argument
3124 fs->fs_cstotal.cs_nffree -= fs->fs_cs(fs, cg).cs_nffree; in ffs_checkcgintegrity()
3125 fs->fs_cs(fs, cg).cs_nffree = 0; in ffs_checkcgintegrity()
3126 fs->fs_cstotal.cs_nbfree -= fs->fs_cs(fs, cg).cs_nbfree; in ffs_checkcgintegrity()
3127 fs->fs_cs(fs, cg).cs_nbfree = 0; in ffs_checkcgintegrity()
3128 fs->fs_cstotal.cs_nifree -= fs->fs_cs(fs, cg).cs_nifree; in ffs_checkcgintegrity()
3129 fs->fs_cs(fs, cg).cs_nifree = 0; in ffs_checkcgintegrity()
3130 fs->fs_maxcluster[cg] = 0; in ffs_checkcgintegrity()
3131 fs->fs_flags |= FS_NEEDSFSCK; in ffs_checkcgintegrity()
3132 fs->fs_fmod = 1; in ffs_checkcgintegrity()
3142 ffs_fserr(struct fs *fs, in ffs_fserr() argument
3151 fs->fs_fsmnt, cp); in ffs_fserr()
3271 struct fs *fs; in sysctl_ffs_fsck() local
3307 fs = ump->um_fs; in sysctl_ffs_fsck()
3318 fs->fs_flags |= (long)cmd.value; in sysctl_ffs_fsck()
3320 fs->fs_flags &= ~(long)cmd.value; in sysctl_ffs_fsck()
3421 if ((error = ffs_freefile(ump, fs, ump->um_devvp, in sysctl_ffs_fsck()
3445 blksize = fs->fs_frag - (blkno % fs->fs_frag); in sysctl_ffs_fsck()
3450 ffs_blkfree(ump, fs, ump->um_devvp, blkno, in sysctl_ffs_fsck()
3451 blksize * fs->fs_fsize, UFS_ROOTINO, in sysctl_ffs_fsck()
3455 blksize = fs->fs_frag; in sysctl_ffs_fsck()
3471 fs->fs_cstotal.cs_ndir += cmd.value; in sysctl_ffs_fsck()
3481 fs->fs_cstotal.cs_nbfree += cmd.value; in sysctl_ffs_fsck()
3491 fs->fs_cstotal.cs_nifree += cmd.value; in sysctl_ffs_fsck()
3501 fs->fs_cstotal.cs_nffree += cmd.value; in sysctl_ffs_fsck()
3511 fs->fs_cstotal.cs_numclusters += cmd.value; in sysctl_ffs_fsck()