Home | History | Annotate | Download | only in newfs_lfs

Lines Matching refs:fs

276 maxfilesize(struct lfs *fs, int bshift)
281 nptr = (1 << bshift) / LFS_BLKPTRSIZE(fs);
292 make_dinode(ino_t ino, union lfs_dinode *dip, int nfrags, struct lfs *fs)
298 nblocks = howmany(nfrags, lfs_sb_getfrag(fs));
300 nfrags = roundup(nfrags, lfs_sb_getfrag(fs));
302 lfs_dino_setnlink(fs, dip, 1);
303 lfs_dino_setblocks(fs, dip, nfrags);
305 lfs_dino_setsize(fs, dip, nfrags << lfs_sb_getffshift(fs));
306 t = lfs_sb_gettstamp(fs);
307 lfs_dino_setatime(fs, dip, t);
308 lfs_dino_setmtime(fs, dip, t);
309 lfs_dino_setctime(fs, dip, t);
310 lfs_dino_setatimensec(fs, dip, 0);
311 lfs_dino_setmtimensec(fs, dip, 0);
312 lfs_dino_setctimensec(fs, dip, 0);
313 lfs_dino_setinumber(fs, dip, ino);
314 lfs_dino_setgen(fs, dip, 1);
321 bb = howmany(bb, LFS_NINDIR(fs));
325 lfs_dino_setblocks(fs, dip,
326 lfs_dino_getblocks(fs, dip) + lfs_blkstofrags(fs, ifibc));
331 lfs_dino_setdb(fs, dip, i, 0x0);
334 lfs_dino_setib(fs, dip, 0, 0x0);
335 bb = howmany(nblocks - ULFS_NDADDR, LFS_NINDIR(fs)) - 1;
336 factor = LFS_NINDIR(fs);
340 lfs_dino_setib(fs, dip, lvl, 0x0);
341 bb = howmany(bb, LFS_NINDIR(fs));
343 factor *= LFS_NINDIR(fs);
355 make_dir(struct lfs *fs, void *bufp,
367 reclen = LFS_DIRECTSIZ(fs, namlen);
377 lfs_dir_setino(fs, ep, protodir[i].dp_ino);
378 lfs_dir_setreclen(fs, ep, reclen);
379 lfs_dir_settype(fs, ep, protodir[i].dp_type);
380 lfs_dir_setnamlen(fs, ep, namlen);
381 lfs_copydirname(fs, lfs_dir_nameptr(fs, ep), protodir[i].dp_name,
383 ep = LFS_NEXTDIR(fs, ep);
400 struct lfs *fs; /* Superblock */
437 fs = lfs_init(devfd, start, 0, 1, 1/* XXX debug*/);
438 save_devvp = fs->lfs_devvp;
439 vp = fs->lfs_ivnode;
441 *fs = lfs_default;
443 fs->lfs_dlfs_u.u_64 = dlfs64_default;
445 fs->lfs_dlfs_u.u_32 = dlfs32_default;
447 fs->lfs_is64 = is64;
448 fs->lfs_dobyteswap = dobyteswap;
449 fs->lfs_hasolddirfmt = false;
450 fs->lfs_ivnode = vp;
451 fs->lfs_devvp = save_devvp;
455 lfs_sb_setversion(fs, version);
459 fatal("partition label indicated fs type \"%s\", "
512 lfs_sb_setbshift(fs, lfs_log2(bsize));
513 if (1 << lfs_sb_getbshift(fs) != bsize)
515 lfs_sb_setbsize(fs, bsize);
516 lfs_sb_setfsize(fs, fsize);
517 lfs_sb_setbmask(fs, bsize - 1);
518 lfs_sb_setffmask(fs, fsize - 1);
519 lfs_sb_setffshift(fs, lfs_log2(fsize));
520 if (1 << lfs_sb_getffshift(fs) != fsize)
522 lfs_sb_setfrag(fs, lfs_numfrags(fs, bsize));
523 lfs_sb_setfbmask(fs, lfs_sb_getfrag(fs) - 1);
524 lfs_sb_setfbshift(fs, lfs_log2(lfs_sb_getfrag(fs)));
525 lfs_sb_setifpb(fs, bsize / IFILE_ENTRYSIZE(fs));
526 lfs_sb_setnindir(fs, bsize / LFS_BLKPTRSIZE(fs));
529 if (lfs_sb_getversion(fs) == 1) {
530 lfs_sb_setsumsize(fs, LFS_V1_SUMMARY_SIZE);
538 fs->lfs_dlfs_u.u_32.dlfs_segshift = segshift;
539 fs->lfs_dlfs_u.u_32.dlfs_segmask = ssize - 1;
541 lfs_sb_setifpb(fs, lfs_sb_getbsize(fs) / sizeof(IFILE_V1));
542 lfs_sb_setibsize(fs, lfs_sb_getbsize(fs));
543 fs, bsize / sizeof(SEGUSE_V1));
544 lfs_sb_setssize(fs, ssize >> lfs_sb_getbshift(fs));
554 lfs_sb_setsumsize(fs, fsize);
557 fs->lfs_dlfs_u.u_32.dlfs_segshift = 0;
558 fs->lfs_dlfs_u.u_32.dlfs_segmask = 0;
560 lfs_sb_setsepb(fs, bsize / sizeof(SEGUSE));
561 lfs_sb_setssize(fs, ssize);
562 lfs_sb_setibsize(fs, ibsize);
564 lfs_sb_setinopb(fs, lfs_sb_getibsize(fs) / DINOSIZE(fs));
565 lfs_sb_setminfree(fs, minfree);
568 lfs_sb_setinopf(fs, secsize/DINOSIZE(fs));
569 lfs_sb_setinterleave(fs, interleave);
572 lfs_sb_setident(fs, roll_id);
583 lfs_sb_setblktodb(fs, lfs_log2(db_per_blk));
584 lfs_sb_setfsbtodb(fs, lfs_log2(fsize / secsize));
586 lfs_sb_setsushift(fs, lfs_log2(lfs_sb_getsepb(fs)));
587 lfs_sb_setfsbtodb(fs, 0);
588 lfs_sb_setsize(fs, dkw->dkw_size >> lfs_sb_getblktodb(fs));
590 label_fsb = lfs_btofsb(fs, roundup(LFS_LABELPAD, fsize));
591 sb_fsb = lfs_btofsb(fs, roundup(LFS_SBPAD, fsize));
592 lfs_sb_setfsbpseg(fs, LFS_DBTOFSB(fs, ssize / secsize));
593 lfs_sb_setsize(fs, dkw->dkw_size >> lfs_sb_getfsbtodb(fs));
594 lfs_sb_setdsize(fs, LFS_DBTOFSB(fs, dkw->dkw_size) -
595 MAX(label_fsb, LFS_DBTOFSB(fs, start)));
596 lfs_sb_setnseg(fs, lfs_sb_getdsize(fs) / lfs_segtod(fs, 1));
598 lfs_sb_setnclean(fs, lfs_sb_getnseg(fs) - 1);
599 lfs_sb_setmaxfilesize(fs, maxfilesize(fs, lfs_sb_getbshift(fs)));
602 lfs_sb_setminfreeseg(fs, lfs_sb_getnseg(fs) / DFL_MIN_FREE_SEGS);
604 lfs_sb_setminfreeseg(fs, minfreeseg);
605 if (lfs_sb_getminfreeseg(fs) < MIN_FREE_SEGS)
606 lfs_sb_setminfreeseg(fs, MIN_FREE_SEGS);
609 lfs_sb_setresvseg(fs, lfs_sb_getminfreeseg(fs) / 2 + 1);
611 lfs_sb_setresvseg(fs, resvseg);
612 if (lfs_sb_getresvseg(fs) < MIN_RESV_SEGS)
613 lfs_sb_setresvseg(fs, MIN_RESV_SEGS);
615 if(lfs_sb_getnseg(fs) < (4 * lfs_sb_getminfreeseg(fs))
616 || lfs_sb_getnseg(fs) < LFS_MIN_SBINTERVAL + 1)
635 "segment size.\n", ssize, lfs_sb_getbsize(fs));
644 printf("Creating a version %d LFS%d", lfs_sb_getversion(fs), bitwidth);
645 if (lfs_sb_getversion(fs) > 1)
646 printf(" with roll-forward ident 0x%x", lfs_sb_getident(fs));
653 fssize = (double)lfs_sb_getnseg(fs);
657 lfs_sb_getnseg(fs), ssize);
667 lfs_sb_setdsize(fs,
668 lfs_segtod(fs, lfs_sb_getnseg(fs) - lfs_sb_getminfreeseg(fs)));
669 lfs_sb_setbfree(fs, lfs_sb_getdsize(fs));
670 lfs_sb_subbfree(fs, LFS_DBTOFSB(fs, ((lfs_sb_getnseg(fs) / 2) <<
671 lfs_sb_getblktodb(fs))));
673 lfs_sb_setsegtabsz(fs, SEGTABSIZE_SU(fs));
674 lfs_sb_setcleansz(fs, CLEANSIZE_SU(fs));
677 lfs_sb_settstamp(fs, stamp);
679 lfs_sb_setotstamp(fs, stamp);
681 if ((sb_interval = lfs_sb_getnseg(fs) / LFS_MAXNUMSB) < LFS_MIN_SBINTERVAL)
691 if (LFS_FSBTODB(fs, LFS_DBTOFSB(fs, start)) != start)
701 lfs_sb_setsboff(fs, 0, label_fsb);
703 lfs_sb_sets0addr(fs, lfs_sb_getsboff(fs, 0));
705 lfs_sb_sets0addr(fs, LFS_DBTOFSB(fs, start));
706 lfs_sb_subdsize(fs, sb_fsb);
708 sb_addr = ((i * sb_interval) * lfs_segtod(fs, 1))
709 + lfs_sb_getsboff(fs, 0);
711 if (lfs_sb_getversion(fs) > 1 && lfs_sb_gets0addr(fs) < label_fsb)
714 >= LFS_DBTOFSB(fs, dkw->dkw_size))
716 lfs_sb_setsboff(fs, i, sb_addr);
717 lfs_sb_subdsize(fs, sb_fsb);
721 if (lfs_sb_getsboff(fs, 1) == 0x0) {
726 lfs_sb_setlastseg(fs, lfs_sntod(fs, lfs_sb_getnseg(fs) - 2));
727 lfs_sb_setcurseg(fs, lfs_sntod(fs, lfs_sb_getnseg(fs) - 1));
728 lfs_sb_setoffset(fs, lfs_sntod(fs, lfs_sb_getnseg(fs)));
729 lfs_sb_setnextseg(fs, lfs_sntod(fs, 0));
743 VTOI(fs->lfs_ivnode)->i_din = dip;
745 lfs_dino_setmode(fs, dip, LFS_IFREG | 0600);
746 lfs_dino_setflags(fs, dip, SF_IMMUTABLE);
748 lfs_blkstofrags(fs, lfs_sb_getcleansz(fs) + lfs_sb_getsegtabsz(fs) + 1), fs);
749 lfs_dino_setsize(fs, dip, (lfs_sb_getcleansz(fs) + lfs_sb_getsegtabsz(fs) + 1) << lfs_sb_getbshift(fs));
750 for (i = 0; i < ULFS_NDADDR && i < (lfs_dino_getsize(fs, dip) >> lfs_sb_getbshift(fs)); i++)
751 VTOI(fs->lfs_ivnode)->i_lfs_fragsize[i] = lfs_sb_getbsize(fs);
756 fs->lfs_suflags = (u_int32_t **) malloc(2 * sizeof(u_int32_t *));
757 if (fs->lfs_suflags == NULL)
759 fs->lfs_suflags[0] = (u_int32_t *) malloc(lfs_sb_getnseg(fs) * sizeof(u_int32_t));
760 if (fs->lfs_suflags[0] == NULL)
762 fs->lfs_suflags[1] = (u_int32_t *) malloc(lfs_sb_getnseg(fs) * sizeof(u_int32_t));
763 if (fs->lfs_suflags[1] == NULL)
769 LFS_CLEANERINFO(cip, fs, bp);
770 lfs_ci_setclean(fs, cip, lfs_sb_getnseg(fs));
771 lfs_ci_setdirty(fs, cip, 0);
773 lfs_ci_setfree_head(fs, cip, HIGHEST_USED_INO + 1);
774 lfs_ci_setfree_tail(fs, cip, lfs_sb_getifpb(fs) - 1);
776 LFS_SYNC_CLEANERINFO(cip, fs, bp, 1);
781 for (i = j = 0; i < lfs_sb_getnseg(fs); i++) {
782 LFS_SEGENTRY(segp, fs, i, bp);
785 lfs_sb_gets0addr(fs) < lfs_btofsb(fs, LFS_LABELPAD + LFS_SBPAD)) {
787 lfs_sb_subbfree(fs, sb_fsb);
793 lfs_sb_subbfree(fs, sb_fsb);
803 LFS_WRITESEGENTRY(segp, fs, i, bp);
807 vp = lfs_raw_vget(fs, ULFS_ROOTINO, devfd, 0x0);
809 make_dinode(ULFS_ROOTINO, dip, howmany(LFS_DIRBLKSIZ, lfs_sb_getfsize(fs)), fs);
810 lfs_dino_setmode(fs, dip, LFS_IFDIR | UMASK);
818 lfs_btofsb(fs, roundup(LFS_DIRBLKSIZ, lfs_sb_getfsize(fs)));
819 lfs_dino_setsize(fs, dip, VTOI(vp)->i_lfs_osize);
820 lfs_dino_setnlink(fs, dip, VTOI(vp)->i_nlink);
821 lfs_dino_setblocks(fs, dip, VTOI(vp)->i_lfs_effnblks);
822 for (i = 0; i < ULFS_NDADDR && i < howmany(LFS_DIRBLKSIZ, lfs_sb_getbsize(fs)); i++)
823 VTOI(vp)->i_lfs_fragsize[i] = lfs_sb_getbsize(fs);
824 if (LFS_DIRBLKSIZ < lfs_sb_getbsize(fs))
826 roundup(LFS_DIRBLKSIZ, lfs_sb_getfsize(fs));
827 bread(vp, 0, lfs_sb_getfsize(fs), 0, &bp);
828 make_dir(fs, bp->b_data, lfs_root_dir, __arraycount(lfs_root_dir));
833 vp = lfs_raw_vget(fs, LOSTFOUNDINO, devfd, 0x0);
835 make_dinode(LOSTFOUNDINO, dip, howmany(DIRBLKSIZ,fs->lfs_fsize), fs);
840 lfs_btofsb(fs, roundup(DIRBLKSIZ,fs->lfs_fsize));
841 for (i = 0; i < ULFS_NDADDR && i < howmany(DIRBLKSIZ, lfs_sb_getbsize(fs)); i++)
842 VTOI(vp)->i_lfs_fragsize[i] = lfs_sb_getbsize(fs);
843 if (DIRBLKSIZ < lfs_sb_getbsize(fs))
845 roundup(DIRBLKSIZ,fs->lfs_fsize);
846 bread(vp, 0, fs->lfs_fsize, 0, &bp);
847 make_dir(fs, bp->b_data, lfs_lf_dir, __arraycount(lfs_lf_dir));
852 LFS_IENTRY(ipall, fs, 1, bp);
881 i < lfs_sb_getifpb(fs); ++ip64) {
890 i < lfs_sb_getifpb(fs); ++ip32) {
899 i < lfs_sb_getifpb(fs); ++ip_v1) {
911 lfs_segwrite(fs, SEGM_CKP);
917 lfs_sb_setavail(fs, 0);
919 for (i = 0; i < lfs_sb_getnseg(fs); i++) {
920 LFS_SEGENTRY(segp, fs, i, bp);
922 bb += lfs_btofsb(fs, segp->su_nbytes +
923 segp->su_nsums * lfs_sb_getsumsize(fs));
924 ubb += lfs_btofsb(fs, segp->su_nbytes +
925 segp->su_nsums * lfs_sb_getsumsize(fs) +
926 segp->su_ninos * lfs_sb_getibsize(fs));
927 dmeta += lfs_btofsb(fs,
928 lfs_sb_getsumsize(fs) * segp->su_nsums);
929 dmeta += lfs_btofsb(fs,
930 lfs_sb_getibsize(fs) * segp->su_ninos);
932 lfs_sb_addavail(fs, lfs_segtod(fs, 1));
934 lfs_sb_subavail(fs, lfs_btofsb(fs, LFS_SBPAD));
935 if (i == 0 && lfs_sb_getversion(fs) > 1 &&
936 lfs_sb_gets0addr(fs) < lfs_btofsb(fs, LFS_LABELPAD))
937 lfs_sb_subavail(fs, lfs_btofsb(fs, LFS_LABELPAD) -
938 lfs_sb_gets0addr(fs));
943 i = lfs_dtosn(fs, lfs_sb_getoffset(fs));
944 lfs_sb_addavail(fs, lfs_sntod(fs, i + 1) - lfs_sb_getoffset(fs));
946 lfs_sb_subavail(fs, lfs_segtod(fs, (lfs_sb_getminfreeseg(fs) - (lfs_sb_getminfreeseg(fs) / 2))));
949 if (lfs_sb_getversion(fs) > 1 && lfs_sb_gets0addr(fs) < lfs_btofsb(fs, LFS_LABELPAD))
950 labelskew = lfs_btofsb(fs, LFS_LABELPAD);
951 lfs_sb_setbfree(fs, lfs_sb_getdsize(fs) - labelskew - (ubb + bb) / 2);
954 LFS_CLEANERINFO(cip, fs, bp);
955 lfs_ci_setbfree(fs, cip, lfs_sb_getbfree(fs));
956 lfs_ci_setavail(fs, cip, lfs_sb_getavail(fs));
957 LFS_SYNC_CLEANERINFO(cip, fs, bp, 1);
959 lfs_segwrite(fs, SEGM_CKP);
967 seg_addr = lfs_sb_getsboff(fs, i);
974 (long long)LFS_FSBTODB(fs, seg_addr));
985 lfs_sb_settstamp(fs, 0);
986 lfs_sb_setcksum(fs, lfs_sb_cksum(fs));
989 lfs_writesuper(fs, seg_addr);