Lines Matching refs:pmp

122 	struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
137 msdosfs_iconv->open(win, local, &pmp->pm_u2w);
138 msdosfs_iconv->open(local, win, &pmp->pm_w2u);
139 msdosfs_iconv->open(dos, local, &pmp->pm_u2d);
140 msdosfs_iconv->open(local, dos, &pmp->pm_d2u);
145 pmp->pm_w2u = NULL;
146 pmp->pm_u2w = NULL;
147 pmp->pm_d2u = NULL;
148 pmp->pm_u2d = NULL;
153 pmp->pm_gid = v;
155 pmp->pm_uid = v;
157 pmp->pm_mask = v & ALLPERMS;
159 pmp->pm_dirmask = v & ALLPERMS;
161 &pmp->pm_flags, MSDOSFSMNT_SHORTNAME);
163 &pmp->pm_flags, MSDOSFSMNT_SHORTNAME);
165 &pmp->pm_flags, MSDOSFSMNT_LONGNAME);
167 &pmp->pm_flags, MSDOSFSMNT_LONGNAME);
169 &pmp->pm_flags, MSDOSFSMNT_KICONV);
172 pmp->pm_flags |= MSDOSFSMNT_NOWIN95;
174 pmp->pm_flags &= ~MSDOSFSMNT_NOWIN95;
176 if (pmp->pm_flags & MSDOSFSMNT_NOWIN95)
177 pmp->pm_flags |= MSDOSFSMNT_SHORTNAME;
178 else if (!(pmp->pm_flags &
185 if (FAT32(pmp))
186 pmp->pm_flags |= MSDOSFSMNT_LONGNAME;
191 pmp->pm_flags |= findwin95(VTODE(rootvp)) ?
245 struct msdosfsmount *pmp = NULL;
260 pmp = VFSTOMSDOSFS(mp);
266 if ((pmp->pm_flags & MSDOSFS_LARGEFS) != 0) {
272 if (!(pmp->pm_flags & MSDOSFSMNT_RONLY) &&
288 error = markvoldirty(pmp, 0);
290 (void)markvoldirty(pmp, 1);
297 error = g_access(pmp->pm_cp, 0, -1, 0);
301 (void)markvoldirty(pmp, 1);
309 pmp->pm_fmod = 0;
310 pmp->pm_flags |= MSDOSFSMNT_RONLY;
314 } else if ((pmp->pm_flags & MSDOSFSMNT_RONLY) &&
320 devvp = pmp->pm_devvp;
333 error = g_access(pmp->pm_cp, 0, 1, 0);
339 pmp->pm_fmod = 1;
340 pmp->pm_flags &= ~MSDOSFSMNT_RONLY;
346 error = markvoldirty(pmp, 1);
385 pmp = VFSTOMSDOSFS(mp);
389 if (devvp != pmp->pm_devvp)
408 printf("msdosfs_mount(): mp %p, pmp %p, inusemap %p\n", mp, pmp, pmp->pm_inusemap);
416 struct msdosfsmount *pmp;
429 bp = NULL; /* This and pmp both used in error_exit. */
430 pmp = NULL;
469 pmp = malloc(sizeof *pmp, M_MSDOSFSMNT, M_WAITOK | M_ZERO);
470 pmp->pm_mountp = mp;
471 pmp->pm_cp = cp;
472 pmp->pm_bo = bo;
474 lockinit(&pmp->pm_fatlock, 0, msdosfs_lock_msg, 0, 0);
480 pmp->pm_uid = UID_ROOT;
481 pmp->pm_gid = GID_WHEEL;
482 pmp->pm_mask = pmp->pm_dirmask = S_IXUSR | S_IXGRP | S_IXOTH |
497 vfs_flagopt(mp->mnt_optnew, "large", &pmp->pm_flags, MSDOSFS_LARGEFS);
505 pmp->pm_BytesPerSec = getushort(b50->bpbBytesPerSec);
506 if (pmp->pm_BytesPerSec < DEV_BSIZE) {
510 pmp->pm_ResSectors = getushort(b50->bpbResSectors);
511 pmp->pm_FATs = b50->bpbFATs;
512 pmp->pm_RootDirEnts = getushort(b50->bpbRootDirEnts);
513 pmp->pm_Sectors = getushort(b50->bpbSectors);
514 pmp->pm_FATsecs = getushort(b50->bpbFATsecs);
515 pmp->pm_SecPerTrack = getushort(b50->bpbSecPerTrack);
516 pmp->pm_Heads = getushort(b50->bpbHeads);
517 pmp->pm_Media = b50->bpbMedia;
520 pmp->pm_BlkPerSec = pmp->pm_BytesPerSec / DEV_BSIZE;
528 if (!pmp->pm_BytesPerSec || !SecPerClust) {
533 if (pmp->pm_Sectors == 0) {
534 pmp->pm_HiddenSects = getulong(b50->bpbHiddenSecs);
535 pmp->pm_HugeSectors = getulong(b50->bpbHugeSectors);
537 pmp->pm_HiddenSects = getushort(b33->bpbHiddenSecs);
538 pmp->pm_HugeSectors = pmp->pm_Sectors;
540 if (!(pmp->pm_flags & MSDOSFS_LARGEFS)) {
541 if (pmp->pm_HugeSectors > 0xffffffff /
542 (pmp->pm_BytesPerSec / sizeof(struct direntry)) + 1) {
555 if (pmp->pm_RootDirEnts == 0) {
556 if (pmp->pm_FATsecs
564 pmp->pm_fatmask = FAT32_MASK;
565 pmp->pm_fatmult = 4;
566 pmp->pm_fatdiv = 1;
567 pmp->pm_FATsecs = getulong(b710->bpbBigFATsecs);
569 pmp->pm_curfat = getushort(b710->bpbExtFlags) & FATNUM;
571 pmp->pm_flags |= MSDOSFS_FATMIRROR;
573 pmp->pm_flags |= MSDOSFS_FATMIRROR;
584 || (pmp->pm_BytesPerSec < DEV_BSIZE)
585 || (pmp->pm_BytesPerSec & (pmp->pm_BytesPerSec - 1))
586 || (pmp->pm_HugeSectors == 0)
587 || (pmp->pm_FATsecs == 0)
588 || (SecPerClust * pmp->pm_BlkPerSec > MAXBSIZE / DEV_BSIZE)
594 pmp->pm_HugeSectors *= pmp->pm_BlkPerSec;
595 pmp->pm_HiddenSects *= pmp->pm_BlkPerSec; /* XXX not used? */
596 pmp->pm_FATsecs *= pmp->pm_BlkPerSec;
597 SecPerClust *= pmp->pm_BlkPerSec;
599 pmp->pm_fatblk = pmp->pm_ResSectors * pmp->pm_BlkPerSec;
601 if (FAT32(pmp)) {
602 pmp->pm_rootdirblk = getulong(b710->bpbRootClust);
603 pmp->pm_firstcluster = pmp->pm_fatblk
604 + (pmp->pm_FATs * pmp->pm_FATsecs);
605 pmp->pm_fsinfo = getushort(b710->bpbFSInfo) * pmp->pm_BlkPerSec;
607 pmp->pm_rootdirblk = pmp->pm_fatblk +
608 (pmp->pm_FATs * pmp->pm_FATsecs);
609 pmp->pm_rootdirsize = (pmp->pm_RootDirEnts * sizeof(struct direntry)
612 pmp->pm_firstcluster = pmp->pm_rootdirblk + pmp->pm_rootdirsize;
615 pmp->pm_maxcluster = (pmp->pm_HugeSectors - pmp->pm_firstcluster) /
617 pmp->pm_fatsize = pmp->pm_FATsecs * DEV_BSIZE; /* XXX not used? */
619 if (pmp->pm_fatmask == 0) {
620 if (pmp->pm_maxcluster
627 pmp->pm_fatmask = FAT12_MASK;
628 pmp->pm_fatmult = 3;
629 pmp->pm_fatdiv = 2;
631 pmp->pm_fatmask = FAT16_MASK;
632 pmp->pm_fatmult = 2;
633 pmp->pm_fatdiv = 1;
637 clusters = (pmp->pm_fatsize / pmp->pm_fatmult) * pmp->pm_fatdiv;
638 if (pmp->pm_maxcluster >= clusters) {
641 "capacity (%ld)\n", pmp->pm_maxcluster + 1, clusters);
643 pmp->pm_maxcluster = clusters - 1;
646 if (FAT12(pmp))
647 pmp->pm_fatblocksize = 3 * 512;
649 pmp->pm_fatblocksize = PAGE_SIZE;
650 pmp->pm_fatblocksize = roundup(pmp->pm_fatblocksize,
651 pmp->pm_BytesPerSec);
652 pmp->pm_fatblocksec = pmp->pm_fatblocksize / DEV_BSIZE;
653 pmp->pm_bnshift = ffs(DEV_BSIZE) - 1;
659 pmp->pm_bpcluster = SecPerClust * DEV_BSIZE;
660 pmp->pm_crbomask = pmp->pm_bpcluster - 1;
661 pmp->pm_cnshift = ffs(pmp->pm_bpcluster) - 1;
667 if (pmp->pm_bpcluster ^ (1 << pmp->pm_cnshift)) {
684 if (pmp->pm_fsinfo) {
687 if ((error = bread(devvp, pmp->pm_fsinfo, pmp->pm_BytesPerSec,
694 pmp->pm_nxtfree = getulong(fp->fsinxtfree);
695 if (pmp->pm_nxtfree > pmp->pm_maxcluster)
696 pmp->pm_nxtfree = CLUST_FIRST;
698 pmp->pm_fsinfo = 0;
704 * Finish initializing pmp->pm_nxtfree (just in case the first few
707 * value if there is no fsinfo. We will use pmp->pm_nxtfree
710 if (pmp->pm_nxtfree < CLUST_FIRST)
711 pmp->pm_nxtfree = CLUST_FIRST;
717 pmp->pm_inusemap = malloc(howmany(pmp->pm_maxcluster + 1, N_INUSEBITS)
718 * sizeof(*pmp->pm_inusemap),
724 pmp->pm_devvp = devvp;
725 pmp->pm_dev = dev;
730 MSDOSFS_LOCK_MP(pmp);
731 error = fillinusemap(pmp);
732 MSDOSFS_UNLOCK_MP(pmp);
743 pmp->pm_flags |= MSDOSFSMNT_WAITONFAT;
749 pmp->pm_flags |= MSDOSFSMNT_RONLY;
751 if ((error = markvoldirty(pmp, 1)) != 0) {
752 (void)markvoldirty(pmp, 0);
755 pmp->pm_fmod = 1;
757 mp->mnt_data = pmp;
765 if (pmp->pm_flags & MSDOSFS_LARGEFS)
780 if (pmp) {
781 lockdestroy(&pmp->pm_fatlock);
782 if (pmp->pm_inusemap)
783 free(pmp->pm_inusemap, M_MSDOSFSFAT);
784 free(pmp, M_MSDOSFSMNT);
797 struct msdosfsmount *pmp;
806 pmp = VFSTOMSDOSFS(mp);
807 if ((pmp->pm_flags & MSDOSFSMNT_RONLY) == 0) {
808 error = markvoldirty(pmp, 0);
810 (void)markvoldirty(pmp, 1);
814 if (pmp->pm_flags & MSDOSFSMNT_KICONV && msdosfs_iconv) {
815 if (pmp->pm_w2u)
816 msdosfs_iconv->close(pmp->pm_w2u);
817 if (pmp->pm_u2w)
818 msdosfs_iconv->close(pmp->pm_u2w);
819 if (pmp->pm_d2u)
820 msdosfs_iconv->close(pmp->pm_d2u);
821 if (pmp->pm_u2d)
822 msdosfs_iconv->close(pmp->pm_u2d);
827 struct vnode *vp = pmp->pm_devvp;
847 if (pmp->pm_devvp->v_type == VCHR && pmp->pm_devvp->v_rdev != NULL)
848 pmp->pm_devvp->v_rdev->si_mountpt = NULL;
850 g_vfs_close(pmp->pm_cp);
853 vrele(pmp->pm_devvp);
854 dev_rel(pmp->pm_dev);
855 free(pmp->pm_inusemap, M_MSDOSFSFAT);
856 if (pmp->pm_flags & MSDOSFS_LARGEFS)
858 lockdestroy(&pmp->pm_fatlock);
859 free(pmp, M_MSDOSFSMNT);
870 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
875 printf("msdosfs_root(); mp %p, pmp %p\n", mp, pmp);
877 error = deget(pmp, MSDOSFSROOT, MSDOSFSROOT_OFS, &ndep);
887 struct msdosfsmount *pmp;
889 pmp = VFSTOMSDOSFS(mp);
890 sbp->f_bsize = pmp->pm_bpcluster;
891 sbp->f_iosize = pmp->pm_bpcluster;
892 sbp->f_blocks = pmp->pm_maxcluster + 1;
893 sbp->f_bfree = pmp->pm_freeclustercount;
894 sbp->f_bavail = pmp->pm_freeclustercount;
895 sbp->f_files = pmp->pm_RootDirEnts; /* XXX */
904 msdosfs_fsiflush(struct msdosfsmount *pmp, int waitfor)
910 MSDOSFS_LOCK_MP(pmp);
911 if (pmp->pm_fsinfo == 0 || (pmp->pm_flags & MSDOSFS_FSIMOD) == 0) {
915 error = bread(pmp->pm_devvp, pmp->pm_fsinfo, pmp->pm_BytesPerSec,
922 putulong(fp->fsinfree, pmp->pm_freeclustercount);
923 putulong(fp->fsinxtfree, pmp->pm_nxtfree);
924 pmp->pm_flags &= ~MSDOSFS_FSIMOD;
930 MSDOSFS_UNLOCK_MP(pmp);
940 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
949 if (pmp->pm_fmod != 0) {
950 if (pmp->pm_flags & MSDOSFSMNT_RONLY)
990 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY);
991 error = VOP_FSYNC(pmp->pm_devvp, waitfor, td);
994 VOP_UNLOCK(pmp->pm_devvp, 0);
997 error = msdosfs_fsiflush(pmp, waitfor);
1006 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
1011 error = deget(pmp, defhp->defid_dirclust, defhp->defid_dirofs, &dep);