Home | History | Annotate | Download | only in lfs

Lines Matching refs:fs

116 lfs_extend_ifile(struct lfs *fs, kauth_cred_t cred)
129 ASSERT_SEGLOCK(fs);
138 vp = fs->lfs_ivnode;
140 blkno = lfs_lblkno(fs, ip->i_size);
141 if ((error = lfs_balloc(vp, ip->i_size, lfs_sb_getbsize(fs), cred, 0,
145 ip->i_size += lfs_sb_getbsize(fs);
146 lfs_dino_setsize(fs, ip->i_din, ip->i_size);
154 maxino = ((ip->i_size >> lfs_sb_getbshift(fs)) - lfs_sb_getcleansz(fs) -
155 lfs_sb_getsegtabsz(fs)) * lfs_sb_getifpb(fs);
156 fs->lfs_ino_bitmap = (lfs_bm_t *)
157 realloc(fs->lfs_ino_bitmap, ((maxino + BMMASK) >> BMSHIFT) *
159 KASSERT(fs->lfs_ino_bitmap != NULL);
162 i = (blkno - lfs_sb_getsegtabsz(fs) - lfs_sb_getcleansz(fs)) *
163 lfs_sb_getifpb(fs);
166 xmax = i + lfs_sb_getifpb(fs);
174 LFS_GET_HEADFREE(fs, cip, cbp, &oldhead);
175 LFS_PUT_HEADFREE(fs, cip, cbp, i);
176 LFS_GET_TAILFREE(fs, cip, cbp, &tail);
182 LFS_PUT_TAILFREE(fs, cip, cbp, tail);
184 KASSERTMSG((lfs_sb_getfreehd(fs) != LFS_UNUSED_INUM),
195 if (fs->lfs_is64) {
197 SET_BITMAP_FREE(fs, i);
204 } else if (lfs_sb_getversion(fs) > 1) {
206 SET_BITMAP_FREE(fs, i);
215 SET_BITMAP_FREE(fs, i);
224 (intmax_t)xmax - lfs_sb_getifpb(fs), (intmax_t)tail));
239 * to frob fs->lfs_fmod.
249 struct lfs *fs;
255 fs = VTOI(pvp)->i_lfs;
256 if (fs->lfs_ronly)
259 if (!(fs->lfs_flags & LFS_NOTYET))
260 ASSERT_NO_SEGLOCK(fs);
262 DEBUG_CHECK_FREELIST(fs);
264 lfs_seglock(fs, SEGM_PROT);
267 LFS_GET_HEADFREE(fs, cip, cbp, ino);
275 CLR_BITMAP_FREE(fs, *ino);
281 LFS_IENTRY(ifp, fs, *ino, bp);
282 if (lfs_if_getdaddr(fs, ifp) != LFS_UNUSED_DADDR)
287 LFS_PUT_HEADFREE(fs, cip, cbp, lfs_if_getnextfree(fs, ifp));
289 *ino, (uintmax_t)lfs_if_getnextfree(fs, ifp)));
295 *gen = lfs_if_getversion(fs, ifp);
306 lfs_if_setdaddr(fs, ifp, LFS_ILLEGAL_DADDR);
307 lfs_if_setnextfree(fs, ifp, LFS_UNUSED_INUM);
310 if (lfs_sb_getfreehd(fs) == LFS_UNUSED_INUM) {
315 if ((error = lfs_extend_ifile(fs, cred)) != 0) {
317 LFS_PUT_HEADFREE(fs, cip, cbp, *ino);
320 lfs_segunlock(fs);
324 KASSERTMSG((lfs_sb_getfreehd(fs) != LFS_UNUSED_INUM),
329 fs->lfs_fmod = 1;
333 lfs_sb_addnfiles(fs, 1);
336 lfs_segunlock(fs);
338 DEBUG_CHECK_FREELIST(fs);
350 lfs_valloc_fixed(struct lfs *fs, ino_t ino, int vers)
358 if (fs->lfs_ronly)
361 if (!(fs->lfs_flags & LFS_NOTYET))
362 ASSERT_NO_SEGLOCK(fs);
364 DEBUG_CHECK_FREELIST(fs);
366 lfs_seglock(fs, SEGM_PROT);
374 while (VTOI(fs->lfs_ivnode)->i_size <= (ino /
375 lfs_sb_getifpb(fs) + lfs_sb_getcleansz(fs) + lfs_sb_getsegtabsz(fs))
376 << lfs_sb_getbshift(fs)) {
379 lfs_extend_ifile(fs, NOCRED);
386 LFS_IENTRY(ifp, fs, ino, bp);
387 oldnext = lfs_if_getnextfree(fs, ifp);
391 LFS_GET_TAILFREE(fs, cip, cbp, &tailino);
394 LFS_GET_HEADFREE(fs, cip, cbp, &headino);
397 LFS_PUT_HEADFREE(fs, cip, cbp, oldnext);
402 maxino = ((VTOI(fs->lfs_ivnode)->i_size >> lfs_sb_getbshift(fs))
403 - lfs_sb_getcleansz(fs) - lfs_sb_getsegtabsz(fs))
404 * lfs_sb_getifpb(fs);
410 LFS_IENTRY(ifp, fs, thisino, bp);
411 nextfree = lfs_if_getnextfree(fs, ifp);
424 lfs_segunlock(fs);
430 lfs_segunlock(fs);
436 lfs_if_setnextfree(fs, ifp, oldnext);
442 LFS_PUT_TAILFREE(fs, cip, cbp, thisino);
446 LFS_IENTRY(ifp, fs, ino, bp);
447 lfs_if_setversion(fs, ifp, vers);
448 lfs_if_setnextfree(fs, ifp, LFS_UNUSED_INUM);
450 lfs_if_setdaddr(fs, ifp, LFS_ILLEGAL_DADDR);
453 if (lfs_sb_getfreehd(fs) == LFS_UNUSED_INUM) {
459 if ((error = lfs_extend_ifile(fs, NOCRED)) != 0) {
461 LFS_PUT_HEADFREE(fs, cip, cbp, ino);
464 lfs_segunlock(fs);
468 KASSERTMSG((lfs_sb_getfreehd(fs) != LFS_UNUSED_INUM),
472 lfs_segunlock(fs);
474 DEBUG_CHECK_FREELIST(fs);
485 lfs_last_alloc_ino(struct lfs *fs)
489 maxino = ((fs->lfs_ivnode->v_size >> lfs_sb_getbshift(fs)) -
490 lfs_sb_getcleansz(fs) - lfs_sb_getsegtabsz(fs)) *
491 lfs_sb_getifpb(fs);
493 if (ISSET_BITMAP_FREE(fs, ino) == 0)
506 lfs_freelist_prev(struct lfs *fs, ino_t ino)
510 if (lfs_sb_getfreehd(fs) == LFS_UNUSED_INUM) {
518 if (ISSET_BITMAP_FREE(fs, tino))
528 freehdbb = (lfs_sb_getfreehd(fs) >> BMSHIFT);
530 if (fs->lfs_ino_bitmap[bb])
532 if (fs->lfs_ino_bitmap[bb] == 0)
538 if (ISSET_BITMAP_FREE(fs, tino))
564 struct lfs *fs;
569 fs = ip->i_lfs;
574 ASSERT_NO_SEGLOCK(fs);
579 while (lfs_sb_getversion(fs) > 1 && WRITEINPROG(vp)) {
584 lfs_seglock(fs, SEGM_PROT);
586 DEBUG_CHECK_FREELIST(fs);
601 --fs->lfs_dirvcount;
602 TAILQ_REMOVE(&fs->lfs_dchainhd, ip, i_lfs_dchain);
603 wakeup(&fs->lfs_dirvcount);
612 * them to the fs-wide list for that purpose.
619 LIST_INSERT_HEAD(&fs->lfs_segdhd, sd, list);
627 lfs_finalize_ino_seguse(fs, ip);
642 SET_BITMAP_FREE(fs, ino);
650 LFS_IENTRY(ifp, fs, ino, bp);
653 old_iaddr = lfs_if_getdaddr(fs, ifp);
654 lfs_if_setdaddr(fs, ifp, LFS_UNUSED_DADDR);
657 lfs_if_setversion(fs, ifp, lfs_if_getversion(fs, ifp) + 1);
660 if (lfs_sb_getversion(fs) == 1) {
665 LFS_GET_HEADFREE(fs, cip, cbp, &nextfree);
666 lfs_if_setnextfree(fs, ifp, nextfree);
667 LFS_PUT_HEADFREE(fs, cip, cbp, ino);
680 lfs_if_setnextfree(fs, ifp, LFS_UNUSED_INUM);
688 tino = lfs_freelist_prev(fs, ino);
698 LFS_IENTRY(ifp, fs, ino, bp);
700 LFS_GET_HEADFREE(fs, cip, cbp, &nextfree);
701 lfs_if_setnextfree(fs, ifp, nextfree);
702 LFS_PUT_HEADFREE(fs, cip, cbp, ino);
709 LFS_GET_TAILFREE(fs, cip, cbp, &otail);
711 LFS_PUT_TAILFREE(fs, cip, cbp, ino);
727 LFS_IENTRY(ifp, fs, tino, bp);
729 onf = lfs_if_getnextfree(fs, ifp);
730 lfs_if_setnextfree(fs, ifp, ino);
735 LFS_IENTRY(ifp, fs, ino, bp);
737 lfs_if_setnextfree(fs, ifp, onf);
743 LFS_GET_TAILFREE(fs, cip, cbp, &otail);
744 LFS_PUT_TAILFREE(fs, cip, cbp, ino);
752 /* XXX: shouldn't this check be further up *before* we trash the fs? */
761 LFS_SEGENTRY(sup, fs, lfs_dtosn(fs, old_iaddr), bp);
763 KASSERTMSG((sup->su_nbytes >= DINOSIZE(fs)),
766 lfs_dtosn(fs, old_iaddr),
767 (int)DINOSIZE(fs) - sup->su_nbytes);
769 sup->su_nbytes -= DINOSIZE(fs);
771 LFS_WRITESEGENTRY(sup, fs, lfs_dtosn(fs, old_iaddr), bp); /* Ifile */
776 fs->lfs_fmod = 1;
780 lfs_sb_subnfiles(fs, 1);
782 lfs_segunlock(fs);
784 DEBUG_CHECK_FREELIST(fs);
796 lfs_order_freelist(struct lfs *fs, ino_t **orphanp, size_t *norphanp)
806 ASSERT_NO_SEGLOCK(fs);
807 lfs_seglock(fs, SEGM_PROT);
809 DEBUG_CHECK_FREELIST(fs);
811 /* largest inode on fs */
812 maxino = ((fs->lfs_ivnode->v_size >> lfs_sb_getbshift(fs)) -
813 lfs_sb_getcleansz(fs) - lfs_sb_getsegtabsz(fs)) * lfs_sb_getifpb(fs);
816 /* XXX: assert that fs->lfs_ino_bitmap is null here */
817 fs->lfs_ino_bitmap =
820 KASSERT(fs->lfs_ino_bitmap != NULL);
829 if (ino % lfs_sb_getifpb(fs) == 0)
830 LFS_IENTRY(ifp, fs, ino, bp);
832 LFS_IENTRY_NEXT(ifp, fs);
849 if (lfs_if_getnextfree(fs, ifp) == LFS_ORPHAN_NEXTFREE(fs)) {
870 if (DADDR_IS_BAD(lfs_if_getdaddr(fs, ifp))) {
887 LFS_IENTRY(ifp, fs, lastino, bp);
889 lfs_if_setnextfree(fs, ifp, ino);
894 LFS_IENTRY(ifp, fs, ino, bp);
900 SET_BITMAP_FREE(fs, ino);
904 if ((ino + 1) % lfs_sb_getifpb(fs) == 0)
910 LFS_PUT_HEADFREE(fs, cip, bp, firstino);
911 LFS_PUT_TAILFREE(fs, cip, bp, lastino);
914 lfs_segunlock(fs);
932 DEBUG_CHECK_FREELIST(fs);
942 lfs_orphan(struct lfs *fs, ino_t ino)
947 LFS_IENTRY(ifp, fs, ino, bp);
948 lfs_if_setnextfree(fs, ifp, LFS_ORPHAN_NEXTFREE(fs));
954 * because it requires fs->lfs_suflags to be set up, which is not done
956 * run lfs_order_freelist later (i.e., set up fs->lfs_suflags sooner)
961 lfs_free_orphans(struct lfs *fs, ino_t *orphan, size_t norphan)
965 DEBUG_CHECK_FREELIST(fs);
978 LFS_IENTRY(ifp, fs, ino, bp);
979 KASSERT(!DADDR_IS_BAD(lfs_if_getdaddr(fs, ifp)));
980 segno = lfs_dtosn(fs, lfs_if_getdaddr(fs, ifp));
987 error = VFS_VGET(fs->lfs_ivnode->v_mount, ino, LK_EXCLUSIVE,
1019 LFS_SEGENTRY(sup, fs, segno, bp);
1020 KASSERT(sup->su_nbytes >= DINOSIZE(fs));
1021 sup->su_nbytes -= DINOSIZE(fs);
1022 LFS_WRITESEGENTRY(sup, fs, segno, bp);
1025 LFS_IENTRY(ifp, fs, ino, bp);
1026 lfs_if_setdaddr(fs, ifp, LFS_UNUSED_DADDR);
1033 DEBUG_CHECK_FREELIST(fs);
1040 lfs_check_freelist(struct lfs *fs, const char *func, int line)
1052 lfs_seglock(fs, SEGM_PROT);
1054 ip = VTOI(fs->lfs_ivnode);
1055 maxino = ((ip->i_size >> lfs_sb_getbshift(fs)) - lfs_sb_getcleansz(fs) -
1056 lfs_sb_getsegtabsz(fs)) * lfs_sb_getifpb(fs);
1063 LFS_GET_TAILFREE(fs, cip, bp, &tailino);
1066 LFS_IENTRY(ifp, fs, i, bp);
1067 if (lfs_if_getdaddr(fs, ifp) == LFS_UNUSED_DADDR) {
1069 if (lfs_if_getnextfree(fs, ifp) == LFS_UNUSED_INUM
1072 dump_freelist(fs);
1081 || (!INUM_IS_BAD(fs, lfs_if_getnextfree(fs, ifp)))) {
1082 if (lfs_if_getdaddr(fs, ifp) != LFS_UNUSED_DADDR) {
1084 dump_freelist(fs);
1090 (intmax_t)lfs_if_getdaddr(fs, ifp),
1091 (intmax_t)lfs_if_getnextfree(fs, ifp));
1104 LFS_GET_HEADFREE(fs, cip, bp, &headino);
1111 LFS_IENTRY(ifp, fs, thisino, bp);
1112 nextfree = lfs_if_getnextfree(fs, ifp);
1119 dump_freelist(fs);
1126 dump_freelist(fs);
1133 dump_freelist(fs);
1139 lfs_segunlock(fs);
1143 dump_freelist(struct lfs *fs)
1152 ip = VTOI(fs->lfs_ivnode);
1153 maxino = ((ip->i_size >> lfs_sb_getbshift(fs)) - lfs_sb_getcleansz(fs) -
1154 lfs_sb_getsegtabsz(fs)) * lfs_sb_getifpb(fs);
1156 LFS_GET_HEADFREE(fs, cip, bp, &headino);
1158 LFS_GET_TAILFREE(fs, cip, bp, &tailino);
1162 LFS_IENTRY(ifp, fs, i, bp);
1163 ni = lfs_if_getnextfree(fs, ifp);