Home | History | Annotate | Download | only in msdosfs

Lines Matching refs:pmp

97 #define MSDOSFS_NAMEMAX(pmp) \
98 (pmp)->pm_flags & MSDOSFSMNT_LONGNAME ? WIN_MAXLEN : 12
185 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
188 pmp->pm_gid = argp->gid;
189 pmp->pm_uid = argp->uid;
190 pmp->pm_mask = argp->mask & ALLPERMS;
191 pmp->pm_dirmask = argp->dirmask & ALLPERMS;
192 pmp->pm_gmtoff = argp->gmtoff;
193 pmp->pm_flags |= argp->flags & MSDOSFSMNT_MNTOPT;
198 if (pmp->pm_flags & MSDOSFSMNT_GEMDOSFS)
199 pmp->pm_flags |= MSDOSFSMNT_NOWIN95;
201 if (pmp->pm_flags & MSDOSFSMNT_NOWIN95)
202 pmp->pm_flags |= MSDOSFSMNT_SHORTNAME;
203 else if (!(pmp->pm_flags &
210 if (FAT32(pmp))
211 pmp->pm_flags |= MSDOSFSMNT_LONGNAME;
216 pmp->pm_flags |= msdosfs_findwin95(VTODE(rtvp))
223 mp->mnt_stat.f_namemax = MSDOSFS_NAMEMAX(pmp);
283 struct msdosfsmount *pmp = NULL;
293 pmp = VFSTOMSDOSFS(mp);
294 if (pmp == NULL)
297 args->uid = pmp->pm_uid;
298 args->gid = pmp->pm_gid;
299 args->mask = pmp->pm_mask;
300 args->flags = pmp->pm_flags;
302 args->dirmask = pmp->pm_dirmask;
303 args->gmtoff = pmp->pm_gmtoff;
328 pmp = VFSTOMSDOSFS(mp);
330 if (!(pmp->pm_flags & MSDOSFSMNT_RONLY) &&
344 if ((pmp->pm_flags & MSDOSFSMNT_RONLY) &&
355 devvp = pmp->pm_devvp;
365 pmp->pm_flags &= ~MSDOSFSMNT_RONLY;
432 pmp = VFSTOMSDOSFS(mp);
436 if (devvp != pmp->pm_devvp) {
437 DPRINTF("devvp %p pmp %p", devvp, pmp->pm_devvp);
448 printf("msdosfs_mount(): mp %p, pmp %p, inusemap %p\n", mp, pmp, pmp->pm_inusemap);
461 struct msdosfsmount *pmp;
484 pmp = NULL;
545 pmp = malloc(sizeof(*pmp), M_MSDOSFSMNT, M_WAITOK|M_ZERO);
546 pmp->pm_mountp = mp;
554 pmp->pm_BytesPerSec = getushort(b50->bpbBytesPerSec);
555 pmp->pm_ResSectors = getushort(b50->bpbResSectors);
556 pmp->pm_FATs = b50->bpbFATs;
557 pmp->pm_RootDirEnts = getushort(b50->bpbRootDirEnts);
558 pmp->pm_Sectors = getushort(b50->bpbSectors);
559 pmp->pm_FATsecs = getushort(b50->bpbFATsecs);
560 pmp->pm_SecPerTrack = getushort(b50->bpbSecPerTrack);
561 pmp->pm_Heads = getushort(b50->bpbHeads);
562 pmp->pm_Media = b50->bpbMedia;
564 if (pmp->pm_Sectors == 0) {
565 pmp->pm_HiddenSects = getulong(b50->bpbHiddenSecs);
566 pmp->pm_HugeSectors = getulong(b50->bpbHugeSectors);
573 pmp->pm_HiddenSects = getushort(b33->bpbHiddenSecs);
574 pmp->pm_HugeSectors = pmp->pm_Sectors;
585 (pmp->pm_BytesPerSec == 0) || !powerof2(pmp->pm_BytesPerSec) ||
586 pmp->pm_BytesPerSec > MAXBSIZE) ||
587 (pmp->pm_HugeSectors == 0)) {
594 (pmp->pm_SecPerTrack > 63)) {
595 DPRINTF("SecPerTrack %d", pmp->pm_SecPerTrack);
600 if (pmp->pm_RootDirEnts == 0) {
613 if (pmp->pm_Sectors || pmp->pm_FATsecs || FSVers) {
615 pmp->pm_Sectors, pmp->pm_FATsecs, FSVers);
619 pmp->pm_fatmask = FAT32_MASK;
620 pmp->pm_fatmult = 4;
621 pmp->pm_fatdiv = 1;
622 pmp->pm_FATsecs = getulong(b710->bpbBigFATsecs);
626 pmp->pm_flags |= MSDOSFS_FATMIRROR;
628 pmp->pm_curfat = ExtFlags & FATNUM;
630 pmp->pm_flags |= MSDOSFS_FATMIRROR;
633 if (FAT32(pmp)) {
645 if ((pmp->pm_BytesPerSec < GEMDOSFS_BSIZE) ||
646 (pmp->pm_HugeSectors *
647 (pmp->pm_BytesPerSec / GEMDOSFS_BSIZE) > psize)) {
658 BlkPerSec = pmp->pm_BytesPerSec / GEMDOSFS_BSIZE;
659 pmp->pm_BytesPerSec = GEMDOSFS_BSIZE;
660 pmp->pm_HugeSectors *= BlkPerSec;
661 pmp->pm_HiddenSects *= BlkPerSec;
662 pmp->pm_ResSectors *= BlkPerSec;
663 pmp->pm_Sectors *= BlkPerSec;
664 pmp->pm_FATsecs *= BlkPerSec;
669 if (pmp->pm_FATsecs == 0) {
675 pmp->pm_fatblk = pmp->pm_ResSectors;
676 if (FAT32(pmp)) {
682 pmp->pm_rootdirblk = getulong(b710->bpbRootClust);
683 pmp->pm_firstcluster = pmp->pm_fatblk
684 + (pmp->pm_FATs * pmp->pm_FATsecs);
685 pmp->pm_fsinfo = getushort(b710->bpbFSInfo);
687 pmp->pm_rootdirblk = pmp->pm_fatblk +
688 (pmp->pm_FATs * pmp->pm_FATsecs);
689 pmp->pm_rootdirsize = (pmp->pm_RootDirEnts * sizeof(struct direntry)
690 + pmp->pm_BytesPerSec - 1)
691 / pmp->pm_BytesPerSec;/* in sectors */
692 pmp->pm_firstcluster = pmp->pm_rootdirblk + pmp->pm_rootdirsize;
695 pmp->pm_nmbrofclusters = (pmp->pm_HugeSectors - pmp->pm_firstcluster) /
697 pmp->pm_maxcluster = pmp->pm_nmbrofclusters + 1;
698 pmp->pm_fatsize = pmp->pm_FATsecs * pmp->pm_BytesPerSec;
701 if (pmp->pm_nmbrofclusters <= (0xff0 - 2)) {
702 pmp->pm_fatmask = FAT12_MASK;
703 pmp->pm_fatmult = 3;
704 pmp->pm_fatdiv = 2;
706 pmp->pm_fatmask = FAT16_MASK;
707 pmp->pm_fatmult = 2;
708 pmp->pm_fatdiv = 1;
710 } else if (pmp->pm_fatmask == 0) {
711 if (pmp->pm_maxcluster
718 pmp->pm_fatmask = FAT12_MASK;
719 pmp->pm_fatmult = 3;
720 pmp->pm_fatdiv = 2;
722 pmp->pm_fatmask = FAT16_MASK;
723 pmp->pm_fatmult = 2;
724 pmp->pm_fatdiv = 1;
729 if ((pmp->pm_maxcluster & pmp->pm_fatmask) != pmp->pm_maxcluster) {
731 pmp->pm_maxcluster, pmp->pm_fatmask);
737 fatbytes = (pmp->pm_maxcluster+1) * pmp->pm_fatmult / pmp->pm_fatdiv;
738 fatblocksecs = howmany(fatbytes, pmp->pm_BytesPerSec);
740 if (pmp->pm_FATsecs < fatblocksecs) {
741 DPRINTF("FATsecs %lu < real %lu\n", pmp->pm_FATsecs,
747 if (FAT12(pmp)) {
752 pmp->pm_fatblocksec = uimin(3, fatblocksecs);
753 pmp->pm_fatblocksize = pmp->pm_fatblocksec
754 * pmp->pm_BytesPerSec;
756 pmp->pm_fatblocksize = MAXBSIZE;
757 pmp->pm_fatblocksec = pmp->pm_fatblocksize
758 / pmp->pm_BytesPerSec;
761 pmp->pm_bnshift = ffs(pmp->pm_BytesPerSec) - 1;
767 pmp->pm_bpcluster = SecPerClust * pmp->pm_BytesPerSec;
768 pmp->pm_crbomask = pmp->pm_bpcluster - 1;
769 pmp->pm_cnshift = ffs(pmp->pm_bpcluster) - 1;
775 if (pmp->pm_bpcluster ^ (1 << pmp->pm_cnshift)) {
776 DPRINTF("bpcluster %lu cnshift %lu", pmp->pm_bpcluster,
777 pmp->pm_cnshift);
787 if (pmp->pm_bpcluster > MAXBSIZE) {
789 pmp->pm_bpcluster, MAXBSIZE);
803 if (pmp->pm_fsinfo) {
805 const int rdsz = roundup(sizeof(*fp), pmp->pm_BytesPerSec);
812 if ((error = bread(devvp, de_bn2kb(pmp, pmp->pm_fsinfo),
820 pmp->pm_nxtfree = getulong(fp->fsinxtfree);
822 pmp->pm_fsinfo = 0;
831 if (pmp->pm_fsinfo) {
832 if ((pmp->pm_nxtfree == 0xffffffffUL) ||
833 (pmp->pm_nxtfree > pmp->pm_maxcluster))
834 pmp->pm_fsinfo = 0;
841 pmp->pm_inusemap = malloc(((pmp->pm_maxcluster + N_INUSEBITS)
843 * sizeof(*pmp->pm_inusemap),
849 pmp->pm_dev = dev;
850 pmp->pm_devvp = devvp;
855 if ((error = msdosfs_fillinusemap(pmp)) != 0) {
867 pmp->pm_flags |= MSDOSFSMNT_WAITONFAT;
873 pmp->pm_flags |= MSDOSFSMNT_RONLY;
875 pmp->pm_fmod = 1;
876 mp->mnt_data = pmp;
880 mp->mnt_stat.f_namemax = MSDOSFS_NAMEMAX(pmp);
883 mp->mnt_dev_bshift = pmp->pm_bnshift;
884 mp->mnt_fs_bshift = pmp->pm_cnshift;
901 if (pmp) {
902 if (pmp->pm_inusemap)
903 free(pmp->pm_inusemap, M_MSDOSFSFAT);
904 free(pmp, M_MSDOSFSMNT);
923 struct msdosfsmount *pmp;
931 pmp = VFSTOMSDOSFS(mp);
932 if (pmp->pm_devvp->v_type != VBAD)
933 spec_node_setmountedfs(pmp->pm_devvp, NULL);
936 struct vnode *vp = pmp->pm_devvp;
954 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY);
955 (void) VOP_CLOSE(pmp->pm_devvp,
956 pmp->pm_flags & MSDOSFSMNT_RONLY ? FREAD : FREAD|FWRITE, NOCRED);
957 vput(pmp->pm_devvp);
958 msdosfs_fh_destroy(pmp);
959 free(pmp->pm_inusemap, M_MSDOSFSFAT);
960 free(pmp, M_MSDOSFSMNT);
969 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
973 printf("msdosfs_root(); mp %p, pmp %p\n", mp, pmp);
975 if ((error = msdosfs_deget(pmp, MSDOSFSROOT, MSDOSFSROOT_OFS,
990 struct msdosfsmount *pmp;
992 pmp = VFSTOMSDOSFS(mp);
993 sbp->f_bsize = pmp->pm_bpcluster;
995 sbp->f_iosize = pmp->pm_bpcluster;
996 sbp->f_blocks = pmp->pm_nmbrofclusters;
997 sbp->f_bfree = pmp->pm_freeclustercount;
998 sbp->f_bavail = pmp->pm_freeclustercount;
1000 sbp->f_files = pmp->pm_RootDirEnts; /* XXX */
1035 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
1043 if (pmp->pm_fmod != 0) {
1044 if (pmp->pm_flags & MSDOSFSMNT_RONLY)
1073 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY);
1074 if ((error = VOP_FSYNC(pmp->pm_devvp, cred,
1077 VOP_UNLOCK(pmp->pm_devvp);
1084 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
1094 error = msdosfs_fh_lookup(pmp, defh.defid_dirclust, defh.defid_dirofs,
1102 error = msdosfs_deget(pmp, defh.defid_dirclust, defh.defid_dirofs, vpp);
1120 struct msdosfsmount *pmp = VFSTOMSDOSFS(vp->v_mount);
1135 error = msdosfs_fh_enter(pmp, dep->de_dirclust, dep->de_diroffset,