Home | History | Annotate | Download | only in lfs

Lines Matching refs:fs

93 static bool lfs_isseq(const struct lfs *fs, long int lbn1, long int lbn2);
105 * XXX this function does not have appropriate locking to be used on a live fs;
111 lfs_rf_valloc(struct lfs *fs, ino_t ino, int vers, struct lwp *l,
120 LFS_ASSERT_MAXINO(fs, ino);
122 ASSERT_SEGLOCK(fs); /* XXX it doesn't, really */
129 error = VFS_VGET(fs->lfs_ivnode->v_mount, ino, LK_EXCLUSIVE, &vp);
139 : lfs_dino_getnlink(fs, dip)), (intmax_t)vers));
147 && lfs_dino_getnlink(fs, dip) > 0) {
157 vp->v_type = IFTOVT(lfs_dino_getmode(fs, dip));
158 update_inoblk_copy_dinode(fs, ip->i_din, dip);
168 (int)lfs_dino_getgen(fs, ip->i_din)));
185 va.va_type = IFTOVT(lfs_dino_getmode(fs, dip));
186 va.va_mode = lfs_dino_getmode(fs, dip) & ALLPERMS;
189 error = vcache_new(fs->lfs_ivnode->v_mount, NULL, &va, NOCRED, NULL,
198 update_inoblk_copy_dinode(fs, ip->i_din, dip);
203 (int)lfs_dino_getblocks(fs, ip->i_din)));
218 update_meta(struct lfs *fs, ino_t ino, int vers, daddr_t lbn,
233 LFS_ASSERT_MAXINO(fs, ino);
238 if ((error = lfs_rf_valloc(fs, ino, vers, l, &vp, NULL)) != 0)
248 if ((error = lfs_balloc(vp, (lbn << lfs_sb_getbshift(fs)),
257 lfs_sb_addavail(fs, lfs_btofsb(fs, bp->b_bcount));
261 " lfs_dino_getblocks(fs, ip->i_din) = %d\n",
263 (int)lfs_dino_getblocks(fs, ip->i_din)));
279 loff = lfs_lblktosize(fs, lbn);
280 if (loff >= (ULFS_NDADDR << lfs_sb_getbshift(fs))) {
285 newsize = loff + size - lfs_fsbtob(fs, 1) + 1;
291 lfs_dino_setsize(fs, ip->i_din, newsize);
300 lfs_update_single(fs, NULL, vp, lbn, ndaddr, size);
302 LFS_SEGENTRY(sup, fs, lfs_dtosn(fs, ndaddr), bp);
305 (intmax_t)lfs_dtosn(fs, ndaddr),
311 LFS_WRITESEGENTRY(sup, fs, lfs_dtosn(fs, ndaddr), bp);
315 if (!(ip->i_lfs_effnblks >= lfs_dino_getblocks(fs, ip->i_din))
317 || !(lfs_lblkno(fs, ip->i_size) > ULFS_NDADDR ||
318 ip->i_lfs_effnblks == lfs_dino_getblocks(fs, ip->i_din))
324 (intmax_t)lfs_dino_getblocks(fs, ip->i_din));
326 KASSERT(ip->i_lfs_effnblks >= lfs_dino_getblocks(fs, ip->i_din));
328 KASSERT(lfs_lblkno(fs, ip->i_size) > ULFS_NDADDR ||
329 ip->i_lfs_effnblks == lfs_dino_getblocks(fs, ip->i_din));
336 if (LFS_DBTOFSB(fs, odaddr) != ndaddr)
348 update_inoblk_copy_dinode(struct lfs *fs,
351 if (fs->lfs_is64) {
385 && src->di_size < lfs_sb_getmaxsymlinklen(fs)) {
404 && src->di_size < lfs_sb_getmaxsymlinklen(fs)) {
413 struct lfs *fs;
427 fs = lifa->fs;
430 devvp = VTOI(fs->lfs_ivnode)->i_devvp;
436 error = bread(devvp, LFS_FSBTODB(fs, offset), lfs_sb_getibsize(fs),
445 num = LFS_INOPB(fs);
447 dip = DINO_IN_BLOCK(fs, buf, i);
448 ino = lfs_dino_getinumber(fs, dip);
452 LFS_ASSERT_MAXINO(fs, ino);
455 LFS_IENTRY(ifp, fs, lfs_dino_getinumber(fs, dip), ibp);
456 gen = lfs_if_getversion(fs, ifp);
458 if (lfs_dino_getgen(fs, dip) < gen) {
465 error = lfs_rf_valloc(fs, ino, lfs_dino_getgen(fs, dip),
473 if (lfs_dino_getsize(fs, dip) != ip->i_size
479 (intmax_t)lfs_dino_getsize(fs, dip)));
480 lfs_truncate(vp, lfs_dino_getsize(fs, dip), 0,
483 update_inoblk_copy_dinode(fs, ip->i_din, dip);
485 ip->i_flags = lfs_dino_getflags(fs, dip);
486 ip->i_gen = lfs_dino_getgen(fs, dip);
487 ip->i_uid = lfs_dino_getuid(fs, dip);
488 ip->i_gid = lfs_dino_getgid(fs, dip);
490 ip->i_mode = lfs_dino_getmode(fs, dip);
491 ip->i_nlink = lfs_dino_getnlink(fs, dip);
492 ip->i_size = lfs_dino_getsize(fs, dip);
501 lfs_update_iaddr(fs, ip, offset);
517 struct lfs *fs;
526 fs = lifa->fs;
528 devvp = VTOI(fs->lfs_ivnode)->i_devvp;
531 error = bread(devvp, LFS_FSBTODB(fs, offset), lfs_sb_getibsize(fs),
539 num = LFS_INOPB(fs);
541 dip = DINO_IN_BLOCK(fs, dbp->b_data, i);
542 if (lfs_dino_getinumber(fs, dip) == LFS_IFILE_INUM)
546 LFS_IENTRY(ifp, fs, lfs_dino_getinumber(fs, dip), ibp);
547 if (lfs_if_getversion(fs, ifp) < lfs_dino_getgen(fs, dip))
548 lfs_if_setversion(fs, ifp, lfs_dino_getgen(fs, dip));
549 LFS_WRITEIENTRY(ifp, fs, lfs_dino_getinumber(fs, dip), ibp);
561 struct lfs *fs;
569 fs = lffa->fs;
573 size = lfs_sb_getbsize(fs);
574 ino = lfs_fi_getino(fs, fip);
575 LFS_ASSERT_MAXINO(fs, ino);
576 fs, fip); ++j) {
577 if (j == lfs_fi_getnblocks(fs, fip) - 1)
578 size = lfs_fi_getlastlength(fs, fip);
582 lfs_fi_getblock(fs, fip, j) >= 0) {
583 update_meta(fs, ino,
584 lfs_fi_getversion(fs, fip),
585 lfs_fi_getblock(fs, fip, j),
589 *offsetp += lfs_btofsb(fs, size);
596 lfs_skip_superblock(struct lfs *fs, daddr_t *offsetp)
607 if (offset == lfs_sb_gets0addr(fs)) {
608 offset += lfs_btofsb(fs, LFS_LABELPAD);
611 if (offset == lfs_sb_getsboff(fs, i)) {
612 offset += lfs_btofsb(fs, LFS_SBPAD);
632 lfs_parse_pseg(struct lfs *fs, daddr_t *offsetp, u_int64_t nextserial,
651 KASSERT(fs != NULL);
654 devvp = VTOI(fs->lfs_ivnode)->i_devvp;
657 lifa.fs = fs;
661 lifa.buf = malloc(lfs_sb_getbsize(fs), M_SEGMENT, M_WAITOK);
665 lffa.fs = fs;
673 lfs_skip_superblock(fs, offsetp);
677 buf = malloc(lfs_sb_getsumsize(fs), M_SEGMENT, M_WAITOK);
678 error = bread(devvp, LFS_FSBTODB(fs, offset), lfs_sb_getsumsize(fs),
687 if (lfs_ss_getmagic(fs, ssp) != SS_MAGIC) {
697 sumstart = lfs_ss_getsumstart(fs);
698 if (lfs_ss_getsumsum(fs, ssp) !=
700 lfs_sb_getsumsize(fs) - sumstart)) {
715 if (lfs_ss_getnfinfo(fs, ssp) == 0 &&
716 lfs_ss_getninos(fs, ssp) == 0) {
724 if (lfs_sb_getversion(fs) == 1) {
725 if (lfs_ss_getcreate(fs, ssp) < lfs_sb_gettstamp(fs)) {
732 && lfs_ss_getserial(fs, ssp) != nextserial) {
735 (intmax_t)lfs_ss_getserial(fs, ssp),
740 if (lfs_ss_getident(fs, ssp) != lfs_sb_getident(fs)) {
742 PRIx64 "\n", lfs_ss_getident(fs, ssp),
743 lfs_sb_getident(fs), offset));
750 if (lfs_ss_getnfinfo(fs, ssp) > lfs_sb_getssize(fs) / lfs_sb_getfsize(fs)) {
753 (intmax_t)lfs_ss_getnfinfo(fs, ssp),
754 (intmax_t)lfs_sb_getssize(fs) / lfs_sb_getfsize(fs));
757 KASSERT(lfs_ss_getnfinfo(fs, ssp) <= lfs_sb_getssize(fs) / lfs_sb_getfsize(fs));
759 if (lfs_ss_getnfinfo(fs, ssp) > lfs_sb_getfsize(fs) / sizeof(FINFO32)) {
762 (intmax_t)lfs_ss_getnfinfo(fs, ssp),
763 (intmax_t)lfs_sb_getssize(fs) / lfs_sb_getfsize(fs));
766 KASSERT(lfs_ss_getnfinfo(fs, ssp) <= lfs_sb_getfsize(fs) / sizeof(FINFO32));
769 *pseg_flags = lfs_ss_getflags(fs, ssp);
770 ninos = howmany(lfs_ss_getninos(fs, ssp), LFS_INOPB(fs));
771 iip = SEGSUM_IINFOSTART(fs, buf);
772 fip = SEGSUM_FINFOBASE(fs, (SEGSUM *)buf);
776 offset += lfs_btofsb(fs, lfs_sb_getsumsize(fs));
777 for (i = 0; i < lfs_ss_getnfinfo(fs, ssp) || ninos; ++i) {
779 if (ninos && lfs_ii_getblock(fs, iip) == offset) {
782 error = bread(devvp, LFS_FSBTODB(fs, offset),
783 lfs_sb_getbsize(fs), 0, &dbp);
800 offset += lfs_btofsb(fs, lfs_sb_getibsize(fs));
801 iip = NEXTLOWER_IINFO(fs, iip);
808 size = lfs_sb_getbsize(fs);
810 for (j = 0; j < lfs_fi_getnblocks(fs, fip); ++j) {
811 if (j == lfs_fi_getnblocks(fs, fip) - 1)
812 size = lfs_fi_getlastlength(fs, fip);
813 error = bread(devvp, LFS_FSBTODB(fs, offset),
822 offset += lfs_btofsb(fs, size);
829 int n = lfs_fi_getnblocks(fs, fip);
830 size = lfs_fi_getlastlength(fs, fip);
831 offset += lfs_btofsb(fs, lfs_sb_getbsize(fs) * (n - 1)
834 fip = NEXT_FINFO(fs, fip);
839 datasum = lfs_ss_getdatasum(fs, ssp);
853 lfs_flush(fs, SEGM_CKP, 0);
868 if (lfs_dtosn(fs, offset + lfs_sb_getfrag(fs))
869 != lfs_dtosn(fs, offset)) {
870 if (lfs_dtosn(fs, offset) == lfs_dtosn(fs, lfs_ss_getnext(fs,
875 offset = lfs_ss_getnext(fs, ssp);
877 " -> segment %d\n", offset, lfs_dtosn(fs,offset)));
880 lfs_sb_subavail(fs, offset - prevoffset);
894 lfs_roll_forward(struct lfs *fs, struct mount *mp, struct lwp *l)
917 if ((lfs_sb_getpflags(fs) & LFS_PF_CLEAN) || !lfs_do_rfw
918 || lfs_sb_getversion(fs) <= 1 || p == NULL)
922 lfs_sb_getfsmnt(fs), (intmax_t)lfs_sb_getserial(fs)));
923 DEBUG_CHECK_FREELIST(fs);
931 endpseg = startoffset = offset = lfs_sb_getoffset(fs);
935 LFS_SEGENTRY(sup, fs, lfs_dtosn(fs, offset), bp);
937 lfs_sb_subnclean(fs, 1);
939 LFS_WRITESEGENTRY(sup, fs, lfs_dtosn(fs, offset), bp);
941 startserial = lfs_sb_getserial(fs);
946 lfs_parse_pseg(fs, &nextoffset, nextserial,
950 if (lfs_sntod(fs, offset) != lfs_sntod(fs, nextoffset)) {
951 LFS_SEGENTRY(sup, fs, lfs_dtosn(fs, offset),
954 lfs_sb_subnclean(fs, 1);
956 LFS_WRITESEGENTRY(sup, fs, lfs_dtosn(fs, offset), bp);
986 if (lfs_sb_getversion(fs) > 1)
987 lfs_sb_setserial(fs, endserial);
993 lfs_sb_setoffset(fs, endpseg);
994 lfs_sb_setcurseg(fs, lfs_sntod(fs, lfs_dtosn(fs, endpseg)));
995 for (sn = curseg = lfs_dtosn(fs, lfs_sb_getcurseg(fs));;) {
996 sn = (sn + 1) % lfs_sb_getnseg(fs);
1000 LFS_SEGENTRY(sup, fs, sn, bp);
1006 lfs_sb_setnextseg(fs, lfs_sntod(fs, sn));
1008 LFS_SEGENTRY(sup, fs, lfs_dtosn(fs, endpseg), bp);
1010 LFS_WRITESEGENTRY(sup, fs, lfs_dtosn(fs, endpseg), bp);
1021 lfs_parse_pseg(fs, &offset, nextserial++, cred,
1024 DEBUG_CHECK_FREELIST(fs);
1034 lfs_parse_pseg(fs, &offset, nextserial++, cred,
1037 DEBUG_CHECK_FREELIST(fs);
1047 lfs_parse_pseg(fs, &offset, nextserial++, cred,
1050 DEBUG_CHECK_FREELIST(fs);
1056 lfs_sb_setserial(fs, endserial);
1068 lfs_sb_getfsmnt(fs), rblkcnt);
1075 lfs_reset_avail(fs);
1092 struct lfs *fs;
1095 fs = VFSTOULFS(mp)->um_lfs;
1099 if (vp == fs->lfs_ivnode)