Lines Matching full:fs
53 #include <ufs/ffs/fs.h>
66 static int32_t ffs_mapsearch(struct fs *, struct cg *, daddr_t, int);
91 struct fs *fs = ip->i_fs; in ffs_alloc() local
96 if (size > fs->fs_bsize || fragoff(fs, size) != 0) { in ffs_alloc()
98 fs->fs_bsize, size); in ffs_alloc()
100 if (size == fs->fs_bsize && fs->fs_cstotal.cs_nbfree == 0) in ffs_alloc()
102 if (bpref >= fs->fs_size) in ffs_alloc()
105 cg = ino_to_cg(fs, ip->i_number); in ffs_alloc()
107 cg = dtog(fs, bpref); in ffs_alloc()
151 struct fs *fs; in ffs_blkpref_ufs1() local
155 fs = ip->i_fs; in ffs_blkpref_ufs1()
156 if (indx % fs->fs_maxbpg == 0 || bap[indx - 1] == 0) { in ffs_blkpref_ufs1()
157 if (lbn < UFS_NDADDR + NINDIR(fs)) { in ffs_blkpref_ufs1()
158 cg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs1()
159 return (fs->fs_fpg * cg + fs->fs_frag); in ffs_blkpref_ufs1()
167 ino_to_cg(fs, ip->i_number) + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs1()
169 startcg = dtog(fs, in ffs_blkpref_ufs1()
170 ufs_rw32(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + 1); in ffs_blkpref_ufs1()
171 startcg %= fs->fs_ncg; in ffs_blkpref_ufs1()
172 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs1()
173 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs1()
174 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) in ffs_blkpref_ufs1()
175 return (fs->fs_fpg * cg + fs->fs_frag); in ffs_blkpref_ufs1()
177 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) in ffs_blkpref_ufs1()
178 return (fs->fs_fpg * cg + fs->fs_frag); in ffs_blkpref_ufs1()
184 return ufs_rw32(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + fs->fs_frag; in ffs_blkpref_ufs1()
190 struct fs *fs; in ffs_blkpref_ufs2() local
194 fs = ip->i_fs; in ffs_blkpref_ufs2()
195 if (indx % fs->fs_maxbpg == 0 || bap[indx - 1] == 0) { in ffs_blkpref_ufs2()
196 if (lbn < UFS_NDADDR + NINDIR(fs)) { in ffs_blkpref_ufs2()
197 cg = ino_to_cg(fs, ip->i_number); in ffs_blkpref_ufs2()
198 return (fs->fs_fpg * cg + fs->fs_frag); in ffs_blkpref_ufs2()
206 ino_to_cg(fs, ip->i_number) + lbn / fs->fs_maxbpg; in ffs_blkpref_ufs2()
208 startcg = dtog(fs, in ffs_blkpref_ufs2()
209 ufs_rw64(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + 1); in ffs_blkpref_ufs2()
210 startcg %= fs->fs_ncg; in ffs_blkpref_ufs2()
211 avgbfree = fs->fs_cstotal.cs_nbfree / fs->fs_ncg; in ffs_blkpref_ufs2()
212 for (cg = startcg; cg < fs->fs_ncg; cg++) in ffs_blkpref_ufs2()
213 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
214 return (fs->fs_fpg * cg + fs->fs_frag); in ffs_blkpref_ufs2()
217 if (fs->fs_cs(fs, cg).cs_nbfree >= avgbfree) { in ffs_blkpref_ufs2()
218 return (fs->fs_fpg * cg + fs->fs_frag); in ffs_blkpref_ufs2()
225 return ufs_rw64(bap[indx - 1], UFS_FSNEEDSWAP(fs)) + fs->fs_frag; in ffs_blkpref_ufs2()
243 struct fs *fs; in ffs_hashalloc() local
247 fs = ip->i_fs; in ffs_hashalloc()
257 for (i = 1; i < fs->fs_ncg; i *= 2) { in ffs_hashalloc()
259 if (cg >= fs->fs_ncg) in ffs_hashalloc()
260 cg -= fs->fs_ncg; in ffs_hashalloc()
270 cg = (icg + 2) % fs->fs_ncg; in ffs_hashalloc()
271 for (i = 2; i < fs->fs_ncg; i++) { in ffs_hashalloc()
276 if (cg == fs->fs_ncg) in ffs_hashalloc()
295 struct fs *fs = ip->i_fs; in ffs_alloccg() local
296 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_alloccg()
298 if (fs->fs_cs(fs, cg).cs_nbfree == 0 && size == fs->fs_bsize) in ffs_alloccg()
300 error = bread((void *)ip->i_devvp, fsbtodb(fs, cgtod(fs, cg)), in ffs_alloccg()
301 (int)fs->fs_cgsize, NULL, &bp); in ffs_alloccg()
307 (cgp->cg_cs.cs_nbfree == 0 && size == fs->fs_bsize)) { in ffs_alloccg()
311 if (size == fs->fs_bsize) { in ffs_alloccg()
321 frags = numfrags(fs, size); in ffs_alloccg()
322 for (allocsiz = frags; allocsiz < fs->fs_frag; allocsiz++) in ffs_alloccg()
325 if (allocsiz == fs->fs_frag) { in ffs_alloccg()
335 bpref = dtogd(fs, bno); in ffs_alloccg()
336 for (i = frags; i < fs->fs_frag; i++) in ffs_alloccg()
338 i = fs->fs_frag - frags; in ffs_alloccg()
340 fs->fs_cstotal.cs_nffree += i; in ffs_alloccg()
341 fs->fs_cs(fs, cg).cs_nffree += i; in ffs_alloccg()
342 fs->fs_fmod = 1; in ffs_alloccg()
347 bno = ffs_mapsearch(fs, cgp, bpref, allocsiz); in ffs_alloccg()
351 fs->fs_cstotal.cs_nffree -= frags; in ffs_alloccg()
352 fs->fs_cs(fs, cg).cs_nffree -= frags; in ffs_alloccg()
353 fs->fs_fmod = 1; in ffs_alloccg()
357 blkno = cg * fs->fs_fpg + bno; in ffs_alloccg()
379 struct fs *fs = ip->i_fs; in ffs_alloccgblk() local
380 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_alloccgblk()
385 if (bpref == 0 || (uint32_t)dtog(fs, bpref) != ufs_rw32(cgp->cg_cgx, needswap)) { in ffs_alloccgblk()
388 bpref = blknum(fs, bpref); in ffs_alloccgblk()
389 bno = dtogd(fs, bpref); in ffs_alloccgblk()
393 if (ffs_isblock(fs, blksfree_swap, fragstoblks(fs, bno))) in ffs_alloccgblk()
399 bno = ffs_mapsearch(fs, cgp, bpref, (int)fs->fs_frag); in ffs_alloccgblk()
404 blkno = fragstoblks(fs, bno); in ffs_alloccgblk()
405 ffs_clrblock(fs, blksfree_swap, (long)blkno); in ffs_alloccgblk()
406 ffs_clusteracct(fs, cgp, blkno, -1); in ffs_alloccgblk()
408 fs->fs_cstotal.cs_nbfree--; in ffs_alloccgblk()
409 fs->fs_cs(fs, ufs_rw32(cgp->cg_cgx, needswap)).cs_nbfree--; in ffs_alloccgblk()
410 fs->fs_fmod = 1; in ffs_alloccgblk()
411 blkno = ufs_rw32(cgp->cg_cgx, needswap) * fs->fs_fpg + bno; in ffs_alloccgblk()
429 struct fs *fs = ip->i_fs; in ffs_blkfree() local
430 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_blkfree()
432 if (size > fs->fs_bsize || fragoff(fs, size) != 0 || in ffs_blkfree()
433 fragnum(fs, bno) + numfrags(fs, size) > fs->fs_frag) { in ffs_blkfree()
435 (long long)bno, fs->fs_bsize, size); in ffs_blkfree()
437 cg = dtog(fs, bno); in ffs_blkfree()
438 if (bno >= fs->fs_size) { in ffs_blkfree()
443 error = bread((void *)ip->i_devvp, fsbtodb(fs, cgtod(fs, cg)), in ffs_blkfree()
444 (int)fs->fs_cgsize, NULL, &bp); in ffs_blkfree()
453 cgbno = dtogd(fs, bno); in ffs_blkfree()
454 if (size == fs->fs_bsize) { in ffs_blkfree()
455 fragno = fragstoblks(fs, cgbno); in ffs_blkfree()
456 if (!ffs_isfreeblock(fs, cg_blksfree_swap(cgp, needswap), fragno)) { in ffs_blkfree()
460 ffs_setblock(fs, cg_blksfree_swap(cgp, needswap), fragno); in ffs_blkfree()
461 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree()
463 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree()
464 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree()
466 bbase = cgbno - fragnum(fs, cgbno); in ffs_blkfree()
470 blk = blkmap(fs, cg_blksfree_swap(cgp, needswap), bbase); in ffs_blkfree()
471 ffs_fragacct_swap(fs, blk, cgp->cg_frsum, -1, needswap); in ffs_blkfree()
475 frags = numfrags(fs, size); in ffs_blkfree()
484 fs->fs_cstotal.cs_nffree += i; in ffs_blkfree()
485 fs->fs_cs(fs, cg).cs_nffree += i; in ffs_blkfree()
489 blk = blkmap(fs, cg_blksfree_swap(cgp, needswap), bbase); in ffs_blkfree()
490 ffs_fragacct_swap(fs, blk, cgp->cg_frsum, 1, needswap); in ffs_blkfree()
494 fragno = fragstoblks(fs, bbase); in ffs_blkfree()
495 if (ffs_isblock(fs, cg_blksfree_swap(cgp, needswap), fragno)) { in ffs_blkfree()
496 ufs_add32(cgp->cg_cs.cs_nffree, -fs->fs_frag, needswap); in ffs_blkfree()
497 fs->fs_cstotal.cs_nffree -= fs->fs_frag; in ffs_blkfree()
498 fs->fs_cs(fs, cg).cs_nffree -= fs->fs_frag; in ffs_blkfree()
499 ffs_clusteracct(fs, cgp, fragno, 1); in ffs_blkfree()
501 fs->fs_cstotal.cs_nbfree++; in ffs_blkfree()
502 fs->fs_cs(fs, cg).cs_nbfree++; in ffs_blkfree()
505 fs->fs_fmod = 1; in ffs_blkfree()
527 ffs_mapsearch(struct fs *fs, struct cg *cgp, daddr_t bpref, int allocsiz) in ffs_mapsearch() argument
533 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_mapsearch()
540 start = dtogd(fs, bpref) / NBBY; in ffs_mapsearch()
543 len = howmany(fs->fs_fpg, NBBY) - start; in ffs_mapsearch()
548 (const u_char *)fragtbl[fs->fs_frag], in ffs_mapsearch()
549 (1 << (allocsiz - 1 + (fs->fs_frag % NBBY)))); in ffs_mapsearch()
555 (const u_char *)fragtbl[fs->fs_frag], in ffs_mapsearch()
556 (1 << (allocsiz - 1 + (fs->fs_frag % NBBY)))); in ffs_mapsearch()
572 for (i = bno + NBBY; bno < i; bno += fs->fs_frag) { in ffs_mapsearch()
573 blk = blkmap(fs, cg_blksfree_swap(cgp, needswap), bno); in ffs_mapsearch()
577 for (pos = 0; pos <= fs->fs_frag - allocsiz; pos++) { in ffs_mapsearch()
594 ffs_clusteracct(struct fs *fs, struct cg *cgp, int32_t blkno, int cnt) in ffs_clusteracct() argument
600 const int needswap = UFS_FSNEEDSWAP(fs); in ffs_clusteracct()
602 if (fs->fs_contigsumsize <= 0) in ffs_clusteracct()
617 end = start + fs->fs_contigsumsize; in ffs_clusteracct()
638 end = start - fs->fs_contigsumsize; in ffs_clusteracct()
660 if (i > fs->fs_contigsumsize) in ffs_clusteracct()
661 i = fs->fs_contigsumsize; in ffs_clusteracct()
671 lp = &sump[fs->fs_contigsumsize]; in ffs_clusteracct()
672 for (i = fs->fs_contigsumsize; i > 0; i--) in ffs_clusteracct()
675 fs->fs_maxcluster[ufs_rw32(cgp->cg_cgx, needswap)] = i; in ffs_clusteracct()