Lines Matching refs:fs

114 static void ffs_fserr(struct fs *, kauth_cred_t, const char *);
118 static int32_t ffs_mapsearch(struct fs *, struct cg *,
120 static void ffs_blkfree_common(struct ufsmount *, struct fs *, dev_t, struct buf *,
122 static void ffs_freefile_common(struct ufsmount *, struct fs *, dev_t, struct buf *, ino_t,
134 ffs_check_bad_allocation(const char *func, struct fs *fs, daddr_t bno, in ffs_check_bad_allocation() argument
137 if ((u_int)size > fs->fs_bsize || ffs_fragoff(fs, size) != 0 || in ffs_check_bad_allocation()
138 ffs_fragnum(fs, bno) + ffs_numfrags(fs, size) > fs->fs_frag) { in ffs_check_bad_allocation()
141 (long long)dev, bno, fs->fs_bsize, size, fs->fs_fsmnt); in ffs_check_bad_allocation()
144 if (bno >= fs->fs_size) { in ffs_check_bad_allocation()
147 ffs_fserr(fs, NOCRED, "bad block"); in ffs_check_bad_allocation()
180 struct fs *fs; in ffs_alloc() local
187 fs = ip->i_fs; in ffs_alloc()
209 ffs_lblktosize(fs, (voff_t)lbn) < round_page(vp->v_size) && in ffs_alloc()
211 ffs_blkoff(fs, size) != 0)) { in ffs_alloc()
214 voff_t off = trunc_page(ffs_lblktosize(fs, lbn)); in ffs_alloc()
215 voff_t endoff = round_page(ffs_lblktosize(fs, lbn) + size); in ffs_alloc()
232 KASSERTMSG(((u_int)size <= fs->fs_bsize), in ffs_alloc()
234 (unsigned long long)ip->i_dev, fs->fs_bsize, size, fs->fs_fsmnt); in ffs_alloc()
235 KASSERTMSG((ffs_fragoff(fs, size) == 0), in ffs_alloc()
237 (unsigned long long)ip->i_dev, fs->fs_bsize, size, fs->fs_fsmnt); in ffs_alloc()
239 if (size == fs->fs_bsize && fs->fs_cstotal.cs_nbfree == 0) in ffs_alloc()
241 if (freespace(fs, fs->fs_minfree) <= 0 && in ffs_alloc()
252 if (bpref >= fs->fs_size) in ffs_alloc()
255 cg = ino_to_cg(fs, ip->i_number); in ffs_alloc()
257 cg = dtog(fs, bpref); in ffs_alloc()
290 ffs_fserr(fs, cred, "file system full"); in ffs_alloc()
291 uprintf("\n%s: write failed, file system is full\n", fs->fs_fsmnt); in ffs_alloc()
312 struct fs *fs; in ffs_realloccg() local
318 fs = ip->i_fs; in ffs_realloccg()
339 voff_t off = trunc_page(ffs_lblktosize(fs, lbprev)); in ffs_realloccg()
340 voff_t endoff = round_page(ffs_lblktosize(fs, lbprev) + osize); in ffs_realloccg()
354 KASSERTMSG(((u_int)osize <= fs->fs_bsize), in ffs_realloccg()
356 (unsigned long long)ip->i_dev, fs->fs_bsize, osize, nsize, in ffs_realloccg()
357 fs->fs_fsmnt); in ffs_realloccg()
358 KASSERTMSG((ffs_fragoff(fs, osize) == 0), in ffs_realloccg()
360 (unsigned long long)ip->i_dev, fs->fs_bsize, osize, nsize, in ffs_realloccg()
361 fs->fs_fsmnt); in ffs_realloccg()
362 KASSERTMSG(((u_int)nsize <= fs->fs_bsize), in ffs_realloccg()
364 (unsigned long long)ip->i_dev, fs->fs_bsize, osize, nsize, in ffs_realloccg()
365 fs->fs_fsmnt); in ffs_realloccg()
366 KASSERTMSG((ffs_fragoff(fs, nsize) == 0), in ffs_realloccg()
368 (unsigned long long)ip->i_dev, fs->fs_bsize, osize, nsize, in ffs_realloccg()
369 fs->fs_fsmnt); in ffs_realloccg()
371 if (freespace(fs, fs->fs_minfree) <= 0 && in ffs_realloccg()
381 (unsigned long long)ip->i_dev, fs->fs_bsize, bprev, in ffs_realloccg()
382 fs->fs_fsmnt); in ffs_realloccg()
404 cg = dtog(fs, bprev); in ffs_realloccg()
414 if (bp->b_blkno != FFS_FSBTODB(fs, bno)) { in ffs_realloccg()
417 (unsigned long long)FFS_FSBTODB(fs, bno)); in ffs_realloccg()
435 if (bpref >= fs->fs_size) in ffs_realloccg()
437 switch ((int)fs->fs_optim) { in ffs_realloccg()
447 if (fs->fs_minfree < 5 || in ffs_realloccg()
448 fs->fs_cstotal.cs_nffree > in ffs_realloccg()
449 fs->fs_dsize * fs->fs_minfree / (2 * 100)) in ffs_realloccg()
455 fs->fs_fsmnt); in ffs_realloccg()
458 fs->fs_optim = FS_OPTTIME; in ffs_realloccg()
471 request = fs->fs_bsize; in ffs_realloccg()
472 if (fs->fs_cstotal.cs_nffree < in ffs_realloccg()
473 fs->fs_dsize * (fs->fs_minfree - 2) / 100) in ffs_realloccg()
479 fs->fs_fsmnt); in ffs_realloccg()
482 fs->fs_optim = FS_OPTSPACE; in ffs_realloccg()
486 __func__, (unsigned long long)ip->i_dev, fs->fs_optim, in ffs_realloccg()
487 fs->fs_fsmnt); in ffs_realloccg()
502 ip->i_ump->um_mountp, FFS_FSBTODB(fs, bprev), in ffs_realloccg()
507 ffs_blkfree(fs, ip->i_devvp, bprev, (long)osize, in ffs_realloccg()
516 bp->b_blkno = FFS_FSBTODB(fs, bno); in ffs_realloccg()
546 ffs_fserr(fs, cred, "file system full"); in ffs_realloccg()
547 uprintf("\n%s: write failed, file system is full\n", fs->fs_fsmnt); in ffs_realloccg()
573 struct fs *fs; in ffs_valloc() local
581 fs = pip->i_fs; in ffs_valloc()
589 if (fs->fs_cstotal.cs_nifree == 0) in ffs_valloc()
596 if (ipref >= fs->fs_ncg * fs->fs_ipg) in ffs_valloc()
598 cg = ino_to_cg(fs, ipref); in ffs_valloc()
604 if (fs->fs_contigdirs[cg] < 255) in ffs_valloc()
605 fs->fs_contigdirs[cg]++; in ffs_valloc()
607 if (fs->fs_contigdirs[cg] > 0) in ffs_valloc()
608 fs->fs_contigdirs[cg]--; in ffs_valloc()
620 ffs_fserr(fs, cred, "out of inodes"); in ffs_valloc()
621 uprintf("\n%s: create/symlink failed, no inodes free\n", fs->fs_fsmnt); in ffs_valloc()
641 register struct fs *fs; in ffs_dirpref() local
651 fs = pip->i_fs; in ffs_dirpref()
653 avgifree = fs->fs_cstotal.cs_nifree / fs->fs_ncg; in ffs_dirpref()
654 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_dirpref()
655 avgndir = fs->fs_cstotal.cs_ndir / fs->fs_ncg; in ffs_dirpref()
661 prefcg = cprng_fast32() % fs->fs_ncg; in ffs_dirpref()
663 minndir = fs->fs_ipg; in ffs_dirpref()
664 for (cg = prefcg; cg < fs->fs_ncg; cg++) in ffs_dirpref()
665 if (fs->fs_cs(fs, cg).cs_ndir < minndir && in ffs_dirpref()
666 fs->fs_cs(fs, cg).cs_nifree >= avgifree && in ffs_dirpref()
667 fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_dirpref()
669 minndir = fs->fs_cs(fs, cg).cs_ndir; in ffs_dirpref()
672 if (fs->fs_cs(fs, cg).cs_ndir < minndir && in ffs_dirpref()
673 fs->fs_cs(fs, cg).cs_nifree >= avgifree && in ffs_dirpref()
674 fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_dirpref()
676 minndir = fs->fs_cs(fs, cg).cs_ndir; in ffs_dirpref()
678 return ((ino_t)(fs->fs_ipg * mincg)); in ffs_dirpref()
688 maxndir = uimin(avgndir + fs->fs_ipg / 16, fs->fs_ipg); in ffs_dirpref()
695 cgsize = (int64_t)fs->fs_fsize * fs->fs_fpg; in ffs_dirpref()
696 dirsize = (int64_t)fs->fs_avgfilesize * fs->fs_avgfpdir; in ffs_dirpref()
698 curdsz = (cgsize - (int64_t)avgbfree * fs->fs_bsize) / avgndir; in ffs_dirpref()
703 maxcontigdirs = (avgbfree * fs->fs_bsize) / dirsize; in ffs_dirpref()
706 if (fs->fs_avgfpdir > 0) in ffs_dirpref()
708 fs->fs_ipg / fs->fs_avgfpdir); in ffs_dirpref()
717 prefcg = ino_to_cg(fs, pip->i_number); in ffs_dirpref()
718 for (cg = prefcg; cg < fs->fs_ncg; cg++) in ffs_dirpref()
719 if (fs->fs_cs(fs, cg).cs_ndir < maxndir && in ffs_dirpref()
720 fs->fs_cs(fs, cg).cs_nifree >= minifree && in ffs_dirpref()
721 fs->fs_cs(fs, cg).cs_nbfree >= minbfree) { in ffs_dirpref()
722 if (fs->fs_contigdirs[cg] < maxcontigdirs) in ffs_dirpref()
723 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
726 if (fs->fs_cs(fs, cg).cs_ndir < maxndir && in ffs_dirpref()
727 fs->fs_cs(fs, cg).cs_nifree >= minifree && in ffs_dirpref()
728 fs->fs_cs(fs, cg).cs_nbfree >= minbfree) { in ffs_dirpref()
729 if (fs->fs_contigdirs[cg] < maxcontigdirs) in ffs_dirpref()
730 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
735 for (cg = prefcg; cg < fs->fs_ncg; cg++) in ffs_dirpref()
736 if (fs->fs_cs(fs, cg).cs_nifree >= avgifree) in ffs_dirpref()
737 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
739 if (fs->fs_cs(fs, cg).cs_nifree >= avgifree) in ffs_dirpref()
741 return ((ino_t)(fs->fs_ipg * cg)); in ffs_dirpref()
774 struct fs *fs; in ffs_blkpref_ufs1() local
780 fs = ip->i_fs; in ffs_blkpref_ufs1()
798 return ip->i_ffs_first_data_blk + ffs_blkstofrags(fs, lbn); in ffs_blkpref_ufs1()
801 if (indx % fs->fs_maxbpg == 0 || bap[indx - 1] == 0) { in ffs_blkpref_ufs1()
802 if (lbn < UFS_NDADDR + FFS_NINDIR(fs)) { in ffs_blkpref_ufs1()
803 cg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs1()
804 return (cgbase(fs, cg) + fs->fs_frag); in ffs_blkpref_ufs1()
812 ino_to_cg(fs, ip->i_number) + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs1()
814 startcg = dtog(fs, in ffs_blkpref_ufs1()
815 ufs_rw32(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + 1); in ffs_blkpref_ufs1()
816 startcg %= fs->fs_ncg; in ffs_blkpref_ufs1()
817 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs1()
818 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs1()
819 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs1()
820 return (cgbase(fs, cg) + fs->fs_frag); in ffs_blkpref_ufs1()
823 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs1()
824 return (cgbase(fs, cg) + fs->fs_frag); in ffs_blkpref_ufs1()
831 return ufs_rw32(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + fs->fs_frag; in ffs_blkpref_ufs1()
838 struct fs *fs; in ffs_blkpref_ufs2() local
844 fs = ip->i_fs; in ffs_blkpref_ufs2()
862 return ip->i_ffs_first_data_blk + ffs_blkstofrags(fs, lbn); in ffs_blkpref_ufs2()
865 if (indx % fs->fs_maxbpg == 0 || bap[indx - 1] == 0) { in ffs_blkpref_ufs2()
866 if (lbn < UFS_NDADDR + FFS_NINDIR(fs)) { in ffs_blkpref_ufs2()
867 cg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs2()
868 return (cgbase(fs, cg) + fs->fs_frag); in ffs_blkpref_ufs2()
876 ino_to_cg(fs, ip->i_number) + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs2()
878 startcg = dtog(fs, in ffs_blkpref_ufs2()
879 ufs_rw64(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + 1); in ffs_blkpref_ufs2()
880 startcg %= fs->fs_ncg; in ffs_blkpref_ufs2()
881 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs2()
882 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs2()
883 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
884 return (cgbase(fs, cg) + fs->fs_frag); in ffs_blkpref_ufs2()
887 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
888 return (cgbase(fs, cg) + fs->fs_frag); in ffs_blkpref_ufs2()
895 return ufs_rw64(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + fs->fs_frag; in ffs_blkpref_ufs2()
919 struct fs *fs; in ffs_hashalloc() local
923 fs = ip->i_fs; in ffs_hashalloc()
936 for (i = 1; i < fs->fs_ncg; i *= 2) { in ffs_hashalloc()
938 if (cg >= fs->fs_ncg) in ffs_hashalloc()
939 cg -= fs->fs_ncg; in ffs_hashalloc()
949 cg = (icg + 2) % fs->fs_ncg; in ffs_hashalloc()
950 for (i = 2; i < fs->fs_ncg; i++) { in ffs_hashalloc()
955 if (cg == fs->fs_ncg) in ffs_hashalloc()
974 struct fs *fs; in ffs_fragextend() local
982 fs = ip->i_fs; in ffs_fragextend()
987 if (fs->fs_cs(fs, cg).cs_nffree < ffs_numfrags(fs, nsize - osize)) in ffs_fragextend()
989 frags = ffs_numfrags(fs, nsize); in ffs_fragextend()
990 bbase = ffs_fragnum(fs, bprev); in ffs_fragextend()
991 if (bbase > ffs_fragnum(fs, (bprev + frags - 1))) { in ffs_fragextend()
996 error = bread(ip->i_devvp, FFS_FSBTODB(fs, cgtod(fs, cg)), in ffs_fragextend()
997 (int)fs->fs_cgsize, B_MODIFY, &bp); in ffs_fragextend()
1001 if (!cg_chkmagic(cgp, UFS_FSNEEDSWAP(fs))) in ffs_fragextend()
1003 cgp->cg_old_time = ufs_rw32(time_second, UFS_FSNEEDSWAP(fs)); in ffs_fragextend()
1004 if ((fs->fs_magic != FS_UFS1_MAGIC) || in ffs_fragextend()
1005 (fs->fs_old_flags & FS_FLAGS_UPDATED)) in ffs_fragextend()
1006 cgp->cg_time = ufs_rw64(time_second, UFS_FSNEEDSWAP(fs)); in ffs_fragextend()
1007 bno = dtogd(fs, bprev); in ffs_fragextend()
1008 blksfree = cg_blksfree(cgp, UFS_FSNEEDSWAP(fs)); in ffs_fragextend()
1009 for (i = ffs_numfrags(fs, osize); i < frags; i++) in ffs_fragextend()
1018 for (i = frags; i < fs->fs_frag - bbase; i++) in ffs_fragextend()
1021 ufs_add32(cgp->cg_frsum[i - ffs_numfrags(fs, osize)], -1, UFS_FSNEEDSWAP(fs)); in ffs_fragextend()
1023 ufs_add32(cgp->cg_frsum[i - frags], 1, UFS_FSNEEDSWAP(fs)); in ffs_fragextend()
1025 for (i = ffs_numfrags(fs, osize); i < frags; i++) { in ffs_fragextend()
1027 ufs_add32(cgp->cg_cs.cs_nffree, -1, UFS_FSNEEDSWAP(fs)); in ffs_fragextend()
1028 fs->fs_cstotal.cs_nffree--; in ffs_fragextend()
1029 fs->fs_cs(fs, cg).cs_nffree--; in ffs_fragextend()
1031 fs->fs_fmod = 1; in ffs_fragextend()
1032 ACTIVECG_CLR(fs, cg); in ffs_fragextend()
1055 struct fs *fs = ip->i_fs; in ffs_alloccg() local
1062 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_alloccg()
1068 if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize) in ffs_alloccg()
1071 error = bread(ip->i_devvp, FFS_FSBTODB(fs, cgtod(fs, cg)), in ffs_alloccg()
1072 (int)fs->fs_cgsize, B_MODIFY, &bp); in ffs_alloccg()
1077 (cgp->cg_cs.cs_nbfree == 0 && size == fs->fs_bsize)) in ffs_alloccg()
1080 if ((fs->fs_magic != FS_UFS1_MAGIC) || in ffs_alloccg()
1081 (fs->fs_old_flags & FS_FLAGS_UPDATED)) in ffs_alloccg()
1083 if (size == fs->fs_bsize) { in ffs_alloccg()
1086 ACTIVECG_CLR(fs, cg); in ffs_alloccg()
1098 bp, blkno + ffs_numfrags(fs, realsize), in ffs_alloccg()
1111 frags = ffs_numfrags(fs, size); in ffs_alloccg()
1112 for (allocsiz = frags; allocsiz < fs->fs_frag; allocsiz++) in ffs_alloccg()
1115 if (allocsiz == fs->fs_frag) { in ffs_alloccg()
1124 bno = dtogd(fs, blkno); in ffs_alloccg()
1125 for (i = frags; i < fs->fs_frag; i++) in ffs_alloccg()
1127 i = fs->fs_frag - frags; in ffs_alloccg()
1129 fs->fs_cstotal.cs_nffree += i; in ffs_alloccg()
1130 fs->fs_cs(fs, cg).cs_nffree += i; in ffs_alloccg()
1131 fs->fs_fmod = 1; in ffs_alloccg()
1133 ACTIVECG_CLR(fs, cg); in ffs_alloccg()
1138 bno = ffs_mapsearch(fs, cgp, bpref, allocsiz); in ffs_alloccg()
1151 fs->fs_cstotal.cs_nffree -= frags; in ffs_alloccg()
1152 fs->fs_cs(fs, cg).cs_nffree -= frags; in ffs_alloccg()
1153 fs->fs_fmod = 1; in ffs_alloccg()
1157 blkno = cgbase(fs, cg) + bno; in ffs_alloccg()
1158 ACTIVECG_CLR(fs, cg); in ffs_alloccg()
1185 struct fs *fs = ip->i_fs; in ffs_alloccgblk() local
1191 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_alloccgblk()
1197 if (bpref == 0 || dtog(fs, bpref) != ufs_rw32(cgp->cg_cgx, needswap)) { in ffs_alloccgblk()
1200 bpref = ffs_blknum(fs, bpref); in ffs_alloccgblk()
1201 bno = dtogd(fs, bpref); in ffs_alloccgblk()
1205 if (ffs_isblock(fs, blksfree, ffs_fragstoblks(fs, bno))) in ffs_alloccgblk()
1218 bno = ffs_mapsearch(fs, cgp, bpref, (int)fs->fs_frag); in ffs_alloccgblk()
1228 blkno = ffs_fragstoblks(fs, bno); in ffs_alloccgblk()
1229 ffs_clrblock(fs, blksfree, blkno); in ffs_alloccgblk()
1230 ffs_clusteracct(fs, cgp, blkno, -1); in ffs_alloccgblk()
1232 fs->fs_cstotal.cs_nbfree--; in ffs_alloccgblk()
1233 fs->fs_cs(fs, ufs_rw32(cgp->cg_cgx, needswap)).cs_nbfree--; in ffs_alloccgblk()
1234 if ((fs->fs_magic == FS_UFS1_MAGIC) && in ffs_alloccgblk()
1235 ((fs->fs_old_flags & FS_FLAGS_UPDATED) == 0)) { in ffs_alloccgblk()
1237 cylno = old_cbtocylno(fs, bno); in ffs_alloccgblk()
1239 KASSERT(cylno < fs->fs_old_ncyl); in ffs_alloccgblk()
1240 KASSERT(old_cbtorpos(fs, bno) >= 0); in ffs_alloccgblk()
1241 KASSERT(fs->fs_old_nrpos == 0 || old_cbtorpos(fs, bno) < fs->fs_old_nrpos); in ffs_alloccgblk()
1242 ufs_add16(old_cg_blks(fs, cgp, cylno, needswap)[old_cbtorpos(fs, bno)], -1, in ffs_alloccgblk()
1246 fs->fs_fmod = 1; in ffs_alloccgblk()
1248 blkno = cgbase(fs, cg) + bno; in ffs_alloccgblk()
1266 struct fs *fs = ip->i_fs; in ffs_nodealloccg() local
1274 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_nodealloccg()
1279 if (fs->fs_cs(fs, cg).cs_nifree == 0) in ffs_nodealloccg()
1283 if (fs->fs_magic == FS_UFS2_MAGIC) { in ffs_nodealloccg()
1286 initediblk = fs->fs_ipg; in ffs_nodealloccg()
1291 error = bread(ip->i_devvp, FFS_FSBTODB(fs, cgtod(fs, cg)), in ffs_nodealloccg()
1292 (int)fs->fs_cgsize, B_MODIFY, &bp); in ffs_nodealloccg()
1308 if (fs->fs_magic == FS_UFS2_MAGIC && ibp == NULL) { in ffs_nodealloccg()
1311 nalloc = fs->fs_ipg - ufs_rw32(cgp->cg_cs.cs_nifree, needswap); in ffs_nodealloccg()
1312 if (nalloc + FFS_INOPB(fs) > initediblk && in ffs_nodealloccg()
1321 error = ffs_getblk(ip->i_devvp, FFS_FSBTODB(fs, in ffs_nodealloccg()
1322 ino_to_fsba(fs, cg * fs->fs_ipg + initediblk)), in ffs_nodealloccg()
1323 FFS_NOBLK, fs->fs_bsize, false, &ibp); in ffs_nodealloccg()
1327 maxiblk += FFS_INOPB(fs); in ffs_nodealloccg()
1334 if ((fs->fs_magic != FS_UFS1_MAGIC) || in ffs_nodealloccg()
1335 (fs->fs_old_flags & FS_FLAGS_UPDATED)) in ffs_nodealloccg()
1340 ipref %= fs->fs_ipg; in ffs_nodealloccg()
1362 fs->fs_fsmnt); in ffs_nodealloccg()
1369 panic("%s: block not in map: fs=%s", __func__, fs->fs_fsmnt); in ffs_nodealloccg()
1382 UFS_WAPBL_REGISTER_INODE(ip->i_ump->um_mountp, cg * fs->fs_ipg + ipref, in ffs_nodealloccg()
1389 memset(ibp->b_data, 0, fs->fs_bsize); in ffs_nodealloccg()
1391 for (i = 0; i < FFS_INOPB(fs); i++) { in ffs_nodealloccg()
1399 initediblk += FFS_INOPB(fs); in ffs_nodealloccg()
1404 ACTIVECG_CLR(fs, cg); in ffs_nodealloccg()
1407 fs->fs_cstotal.cs_nifree--; in ffs_nodealloccg()
1408 fs->fs_cs(fs, cg).cs_nifree--; in ffs_nodealloccg()
1409 fs->fs_fmod = 1; in ffs_nodealloccg()
1412 fs->fs_cstotal.cs_ndir++; in ffs_nodealloccg()
1413 fs->fs_cs(fs, cg).cs_ndir++; in ffs_nodealloccg()
1421 return ((ino_t)(cg * fs->fs_ipg + ipref)); in ffs_nodealloccg()
1457 struct fs *fs = ump->um_fs; in ffs_blkalloc_ump() local
1464 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_blkalloc_ump()
1466 KASSERT((u_int)size <= fs->fs_bsize && ffs_fragoff(fs, size) == 0 && in ffs_blkalloc_ump()
1467 ffs_fragnum(fs, bno) + ffs_numfrags(fs, size) <= fs->fs_frag); in ffs_blkalloc_ump()
1468 KASSERT(bno < fs->fs_size); in ffs_blkalloc_ump()
1470 cg = dtog(fs, bno); in ffs_blkalloc_ump()
1471 error = bread(ump->um_devvp, FFS_FSBTODB(fs, cgtod(fs, cg)), in ffs_blkalloc_ump()
1472 (int)fs->fs_cgsize, B_MODIFY, &bp); in ffs_blkalloc_ump()
1483 cgbno = dtogd(fs, bno); in ffs_blkalloc_ump()
1487 if (size == fs->fs_bsize) { in ffs_blkalloc_ump()
1488 fragno = ffs_fragstoblks(fs, cgbno); in ffs_blkalloc_ump()
1489 if (!ffs_isblock(fs, blksfree, fragno)) { in ffs_blkalloc_ump()
1494 ffs_clrblock(fs, blksfree, fragno); in ffs_blkalloc_ump()
1495 ffs_clusteracct(fs, cgp, fragno, -1); in ffs_blkalloc_ump()
1497 fs->fs_cstotal.cs_nbfree--; in ffs_blkalloc_ump()
1498 fs->fs_cs(fs, cg).cs_nbfree--; in ffs_blkalloc_ump()
1500 bbase = cgbno - ffs_fragnum(fs, cgbno); in ffs_blkalloc_ump()
1502 frags = ffs_numfrags(fs, size); in ffs_blkalloc_ump()
1513 fragno = ffs_fragstoblks(fs, bbase); in ffs_blkalloc_ump()
1514 if (ffs_isblock(fs, blksfree, fragno)) { in ffs_blkalloc_ump()
1515 ufs_add32(cgp->cg_cs.cs_nffree, fs->fs_frag, needswap); in ffs_blkalloc_ump()
1516 fs->fs_cstotal.cs_nffree += fs->fs_frag; in ffs_blkalloc_ump()
1517 fs->fs_cs(fs, cg).cs_nffree += fs->fs_frag; in ffs_blkalloc_ump()
1518 ffs_clusteracct(fs, cgp, fragno, -1); in ffs_blkalloc_ump()
1520 fs->fs_cstotal.cs_nbfree--; in ffs_blkalloc_ump()
1521 fs->fs_cs(fs, cg).cs_nbfree--; in ffs_blkalloc_ump()
1526 blk = blkmap(fs, blksfree, bbase); in ffs_blkalloc_ump()
1527 ffs_fragacct(fs, blk, cgp->cg_frsum, -1, needswap); in ffs_blkalloc_ump()
1535 fs->fs_cstotal.cs_nffree -= i; in ffs_blkalloc_ump()
1536 fs->fs_cs(fs, cg).cs_nffree -= i; in ffs_blkalloc_ump()
1540 blk = blkmap(fs, blksfree, bbase); in ffs_blkalloc_ump()
1541 ffs_fragacct(fs, blk, cgp->cg_frsum, 1, needswap); in ffs_blkalloc_ump()
1543 fs->fs_fmod = 1; in ffs_blkalloc_ump()
1544 ACTIVECG_CLR(fs, cg); in ffs_blkalloc_ump()
1560 ffs_blkfree_cg(struct fs *fs, struct vnode *devvp, daddr_t bno, long size) in ffs_blkfree_cg() argument
1570 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_blkfree_cg()
1574 cg = dtog(fs, bno); in ffs_blkfree_cg()
1577 KASSERT(fs == ump->um_fs); in ffs_blkfree_cg()
1578 cgblkno = FFS_FSBTODB(fs, cgtod(fs, cg)); in ffs_blkfree_cg()
1580 error = bread(devvp, cgblkno, (int)fs->fs_cgsize, in ffs_blkfree_cg()
1591 ffs_blkfree_common(ump, fs, dev, bp, bno, size, devvp_is_snapshot); in ffs_blkfree_cg()
1604 struct fs *fs; member
1616 ffs_blkfree_td(struct fs *fs, struct discardopdata *td) in ffs_blkfree_td() argument
1624 ffs_lfragtosize(fs, (fs->fs_frag - ffs_fragnum(fs, td->bno)))); in ffs_blkfree_td()
1631 ffs_blkfree_cg(fs, td->devvp, td->bno, todo); in ffs_blkfree_td()
1633 td->bno += ffs_numfrags(fs, todo); in ffs_blkfree_td()
1643 struct fs *fs = ts->fs; in ffs_discardcb() local
1651 #define FFS_FSBTOBYTES(fs, b) ((b) << (fs)->fs_fshift) in ffs_discardcb() argument
1654 start = FFS_FSBTOBYTES(fs, td->bno); in ffs_discardcb()
1666 ffs_blkfree_td(fs, td); in ffs_discardcb()
1676 ffs_discard_init(struct vnode *devvp, struct fs *fs) in ffs_discard_init() argument
1692 ts->fs = fs; in ffs_discard_init()
1718 ffs_blkfree_td(ts->fs, td); in ffs_discard_finish()
1733 ffs_blkfree(struct fs *fs, struct vnode *devvp, daddr_t bno, long size, in ffs_blkfree() argument
1744 if (ffs_snapblkfree(fs, devvp, bno, size, inum)) in ffs_blkfree()
1747 error = ffs_check_bad_allocation(__func__, fs, bno, size, dev, inum); in ffs_blkfree()
1752 ffs_blkfree_cg(fs, devvp, bno, size); in ffs_blkfree()
1766 if (td->bno == bno + ffs_numfrags(fs, size) in ffs_blkfree()
1832 ffs_blkfree_snap(struct fs *fs, struct vnode *devvp, daddr_t bno, long size, in ffs_blkfree_snap() argument
1842 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_blkfree_snap()
1846 cg = dtog(fs, bno); in ffs_blkfree_snap()
1849 cgblkno = ffs_fragstoblks(fs, cgtod(fs, cg)); in ffs_blkfree_snap()
1851 error = ffs_check_bad_allocation(__func__, fs, bno, size, dev, inum); in ffs_blkfree_snap()
1855 error = bread(devvp, cgblkno, (int)fs->fs_cgsize, in ffs_blkfree_snap()
1866 ffs_blkfree_common(ump, fs, dev, bp, bno, size, devvp_is_snapshot); in ffs_blkfree_snap()
1872 ffs_blkfree_common(struct ufsmount *ump, struct fs *fs, dev_t dev, in ffs_blkfree_common() argument
1880 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_blkfree_common()
1882 cg = dtog(fs, bno); in ffs_blkfree_common()
1885 if ((fs->fs_magic != FS_UFS1_MAGIC) || in ffs_blkfree_common()
1886 (fs->fs_old_flags & FS_FLAGS_UPDATED)) in ffs_blkfree_common()
1888 cgbno = dtogd(fs, bno); in ffs_blkfree_common()
1891 if (size == fs->fs_bsize) { in ffs_blkfree_common()
1892 fragno = ffs_fragstoblks(fs, cgbno); in ffs_blkfree_common()
1893 if (!ffs_isfreeblock(fs, blksfree, fragno)) { in ffs_blkfree_common()
1900 (unsigned long long)dev, bno, fs->fs_fsmnt); in ffs_blkfree_common()
1902 ffs_setblock(fs, blksfree, fragno); in ffs_blkfree_common()
1903 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree_common()
1905 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree_common()
1906 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree_common()
1907 if ((fs->fs_magic == FS_UFS1_MAGIC) && in ffs_blkfree_common()
1908 ((fs->fs_old_flags & FS_FLAGS_UPDATED) == 0)) { in ffs_blkfree_common()
1909 i = old_cbtocylno(fs, cgbno); in ffs_blkfree_common()
1911 KASSERT(i < fs->fs_old_ncyl); in ffs_blkfree_common()
1912 KASSERT(old_cbtorpos(fs, cgbno) >= 0); in ffs_blkfree_common()
1913 KASSERT(fs->fs_old_nrpos == 0 || old_cbtorpos(fs, cgbno) < fs->fs_old_nrpos); in ffs_blkfree_common()
1914 ufs_add16(old_cg_blks(fs, cgp, i, needswap)[old_cbtorpos(fs, cgbno)], 1, in ffs_blkfree_common()
1919 bbase = cgbno - ffs_fragnum(fs, cgbno); in ffs_blkfree_common()
1923 blk = blkmap(fs, blksfree, bbase); in ffs_blkfree_common()
1924 ffs_fragacct(fs, blk, cgp->cg_frsum, -1, needswap); in ffs_blkfree_common()
1928 frags = ffs_numfrags(fs, size); in ffs_blkfree_common()
1935 fs->fs_fsmnt); in ffs_blkfree_common()
1940 fs->fs_cstotal.cs_nffree += i; in ffs_blkfree_common()
1941 fs->fs_cs(fs, cg).cs_nffree += i; in ffs_blkfree_common()
1945 blk = blkmap(fs, blksfree, bbase); in ffs_blkfree_common()
1946 ffs_fragacct(fs, blk, cgp->cg_frsum, 1, needswap); in ffs_blkfree_common()
1950 fragno = ffs_fragstoblks(fs, bbase); in ffs_blkfree_common()
1951 if (ffs_isblock(fs, blksfree, fragno)) { in ffs_blkfree_common()
1952 ufs_add32(cgp->cg_cs.cs_nffree, -fs->fs_frag, needswap); in ffs_blkfree_common()
1953 fs->fs_cstotal.cs_nffree -= fs->fs_frag; in ffs_blkfree_common()
1954 fs->fs_cs(fs, cg).cs_nffree -= fs->fs_frag; in ffs_blkfree_common()
1955 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree_common()
1957 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree_common()
1958 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree_common()
1959 if ((fs->fs_magic == FS_UFS1_MAGIC) && in ffs_blkfree_common()
1960 ((fs->fs_old_flags & FS_FLAGS_UPDATED) == 0)) { in ffs_blkfree_common()
1961 i = old_cbtocylno(fs, bbase); in ffs_blkfree_common()
1963 KASSERT(i < fs->fs_old_ncyl); in ffs_blkfree_common()
1964 KASSERT(old_cbtorpos(fs, bbase) >= 0); in ffs_blkfree_common()
1965 KASSERT(fs->fs_old_nrpos == 0 || old_cbtorpos(fs, bbase) < fs->fs_old_nrpos); in ffs_blkfree_common()
1966 ufs_add16(old_cg_blks(fs, cgp, i, needswap)[old_cbtorpos(fs, in ffs_blkfree_common()
1972 fs->fs_fmod = 1; in ffs_blkfree_common()
1973 ACTIVECG_CLR(fs, cg); in ffs_blkfree_common()
1997 struct fs *fs = ump->um_fs; in ffs_freefile() local
2005 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_freefile()
2007 cg = ino_to_cg(fs, ino); in ffs_freefile()
2010 cgbno = FFS_FSBTODB(fs, cgtod(fs, cg)); in ffs_freefile()
2012 if (ino >= fs->fs_ipg * fs->fs_ncg) in ffs_freefile()
2014 (long long)dev, (unsigned long long)ino, fs->fs_fsmnt); in ffs_freefile()
2015 error = bread(devvp, cgbno, (int)fs->fs_cgsize, in ffs_freefile()
2026 ffs_freefile_common(ump, fs, dev, bp, ino, mode, false); in ffs_freefile()
2034 ffs_freefile_snap(struct fs *fs, struct vnode *devvp, ino_t ino, int mode) in ffs_freefile_snap() argument
2042 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_freefile_snap()
2046 cg = ino_to_cg(fs, ino); in ffs_freefile_snap()
2049 cgbno = ffs_fragstoblks(fs, cgtod(fs, cg)); in ffs_freefile_snap()
2050 if (ino >= fs->fs_ipg * fs->fs_ncg) in ffs_freefile_snap()
2053 fs->fs_fsmnt); in ffs_freefile_snap()
2054 error = bread(devvp, cgbno, (int)fs->fs_cgsize, in ffs_freefile_snap()
2064 ffs_freefile_common(ump, fs, dev, bp, ino, mode, true); in ffs_freefile_snap()
2072 ffs_freefile_common(struct ufsmount *ump, struct fs *fs, dev_t dev, in ffs_freefile_common() argument
2078 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_freefile_common()
2081 cg = ino_to_cg(fs, ino); in ffs_freefile_common()
2084 if ((fs->fs_magic != FS_UFS1_MAGIC) || in ffs_freefile_common()
2085 (fs->fs_old_flags & FS_FLAGS_UPDATED)) in ffs_freefile_common()
2088 cgino = ino % fs->fs_ipg; in ffs_freefile_common()
2092 fs->fs_fsmnt); in ffs_freefile_common()
2093 if (fs->fs_ronly == 0) in ffs_freefile_common()
2103 fs->fs_cstotal.cs_nifree++; in ffs_freefile_common()
2104 fs->fs_cs(fs, cg).cs_nifree++; in ffs_freefile_common()
2107 fs->fs_cstotal.cs_ndir--; in ffs_freefile_common()
2108 fs->fs_cs(fs, cg).cs_ndir--; in ffs_freefile_common()
2110 fs->fs_fmod = 1; in ffs_freefile_common()
2111 ACTIVECG_CLR(fs, cg); in ffs_freefile_common()
2119 ffs_checkfreefile(struct fs *fs, struct vnode *devvp, ino_t ino) in ffs_checkfreefile() argument
2131 cg = ino_to_cg(fs, ino); in ffs_checkfreefile()
2133 cgbno = ffs_fragstoblks(fs, cgtod(fs, cg)); in ffs_checkfreefile()
2135 cgbno = FFS_FSBTODB(fs, cgtod(fs, cg)); in ffs_checkfreefile()
2136 if (ino >= fs->fs_ipg * fs->fs_ncg) in ffs_checkfreefile()
2138 if (bread(devvp, cgbno, (int)fs->fs_cgsize, 0, &bp)) { in ffs_checkfreefile()
2142 if (!cg_chkmagic(cgp, UFS_FSNEEDSWAP(fs))) { in ffs_checkfreefile()
2146 inosused = cg_inosused(cgp, UFS_FSNEEDSWAP(fs)); in ffs_checkfreefile()
2147 ino %= fs->fs_ipg; in ffs_checkfreefile()
2160 ffs_mapsearch(struct fs *fs, struct cg *cgp, daddr_t bpref, int allocsiz) in ffs_mapsearch() argument
2167 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_mapsearch()
2176 start = dtogd(fs, bpref) / NBBY; in ffs_mapsearch()
2180 len = howmany(fs->fs_fpg, NBBY) - start; in ffs_mapsearch()
2185 (const u_char *)fragtbl[fs->fs_frag], in ffs_mapsearch()
2186 (1 << (allocsiz - 1 + (fs->fs_frag & (NBBY - 1))))); in ffs_mapsearch()
2192 (const u_char *)fragtbl[fs->fs_frag], in ffs_mapsearch()
2193 (1 << (allocsiz - 1 + (fs->fs_frag & (NBBY - 1))))); in ffs_mapsearch()
2197 ostart, olen, fs->fs_fsmnt, in ffs_mapsearch()
2209 for (i = bno + NBBY; bno < i; bno += fs->fs_frag) { in ffs_mapsearch()
2210 blk = blkmap(fs, blksfree, bno); in ffs_mapsearch()
2214 for (pos = 0; pos <= fs->fs_frag - allocsiz; pos++) { in ffs_mapsearch()
2222 bno, fs->fs_fsmnt); in ffs_mapsearch()
2233 ffs_fserr(struct fs *fs, kauth_cred_t cred, const char *cp) in ffs_fserr() argument
2240 fs->fs_fsmnt, cp); in ffs_fserr()
2244 fs->fs_fsmnt, cp); in ffs_fserr()