Lines Matching refs:pmp
128 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp); in update_mp() local
143 msdosfs_iconv->open(win, local, &pmp->pm_u2w); in update_mp()
144 msdosfs_iconv->open(local, win, &pmp->pm_w2u); in update_mp()
145 msdosfs_iconv->open(dos, local, &pmp->pm_u2d); in update_mp()
146 msdosfs_iconv->open(local, dos, &pmp->pm_d2u); in update_mp()
151 pmp->pm_w2u = NULL; in update_mp()
152 pmp->pm_u2w = NULL; in update_mp()
153 pmp->pm_d2u = NULL; in update_mp()
154 pmp->pm_u2d = NULL; in update_mp()
159 pmp->pm_gid = v; in update_mp()
161 pmp->pm_uid = v; in update_mp()
163 pmp->pm_mask = v & ALLPERMS; in update_mp()
165 pmp->pm_dirmask = v & ALLPERMS; in update_mp()
167 &pmp->pm_flags, MSDOSFSMNT_SHORTNAME); in update_mp()
169 &pmp->pm_flags, MSDOSFSMNT_SHORTNAME); in update_mp()
171 &pmp->pm_flags, MSDOSFSMNT_LONGNAME); in update_mp()
173 &pmp->pm_flags, MSDOSFSMNT_LONGNAME); in update_mp()
175 &pmp->pm_flags, MSDOSFSMNT_KICONV); in update_mp()
178 pmp->pm_flags |= MSDOSFSMNT_NOWIN95; in update_mp()
180 pmp->pm_flags &= ~MSDOSFSMNT_NOWIN95; in update_mp()
182 if (pmp->pm_flags & MSDOSFSMNT_NOWIN95) in update_mp()
183 pmp->pm_flags |= MSDOSFSMNT_SHORTNAME; in update_mp()
185 pmp->pm_flags |= MSDOSFSMNT_LONGNAME; in update_mp()
235 struct msdosfsmount *pmp = NULL; in msdosfs_mount() local
250 pmp = VFSTOMSDOSFS(mp); in msdosfs_mount()
251 if (!(pmp->pm_flags & MSDOSFSMNT_RONLY) && in msdosfs_mount()
272 error = markvoldirty(pmp, 0); in msdosfs_mount()
275 (void)markvoldirty(pmp, 1); in msdosfs_mount()
281 error = g_access(pmp->pm_cp, 0, -1, 0); in msdosfs_mount()
285 (void)markvoldirty(pmp, 1); in msdosfs_mount()
293 pmp->pm_fmod = 0; in msdosfs_mount()
294 pmp->pm_flags |= MSDOSFSMNT_RONLY; in msdosfs_mount()
299 } else if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && in msdosfs_mount()
305 devvp = pmp->pm_devvp; in msdosfs_mount()
317 error = g_access(pmp->pm_cp, 0, 1, 0); in msdosfs_mount()
322 pmp->pm_fmod = 1; in msdosfs_mount()
323 pmp->pm_flags &= ~MSDOSFSMNT_RONLY; in msdosfs_mount()
329 error = markvoldirty(pmp, 1); in msdosfs_mount()
368 pmp = VFSTOMSDOSFS(mp); in msdosfs_mount()
372 if (devvp != pmp->pm_devvp) in msdosfs_mount()
389 printf("msdosfs_mount(): mp %p, pmp %p, inusemap %p\n", mp, pmp, pmp->pm_inusemap); in msdosfs_mount()
397 struct msdosfsmount *pmp; in mountmsdosfs() local
411 pmp = NULL; in mountmsdosfs()
456 pmp = malloc(sizeof *pmp, M_MSDOSFSMNT, M_WAITOK | M_ZERO); in mountmsdosfs()
457 pmp->pm_mountp = mp; in mountmsdosfs()
458 pmp->pm_cp = cp; in mountmsdosfs()
459 pmp->pm_bo = bo; in mountmsdosfs()
461 lockinit(&pmp->pm_fatlock, 0, msdosfs_lock_msg, 0, 0); in mountmsdosfs()
467 pmp->pm_uid = UID_ROOT; in mountmsdosfs()
468 pmp->pm_gid = GID_WHEEL; in mountmsdosfs()
469 pmp->pm_mask = pmp->pm_dirmask = S_IXUSR | S_IXGRP | S_IXOTH | in mountmsdosfs()
478 pmp->pm_BytesPerSec = getushort(b50->bpbBytesPerSec); in mountmsdosfs()
479 if (pmp->pm_BytesPerSec < DEV_BSIZE) { in mountmsdosfs()
483 pmp->pm_ResSectors = getushort(b50->bpbResSectors); in mountmsdosfs()
484 pmp->pm_FATs = b50->bpbFATs; in mountmsdosfs()
485 pmp->pm_RootDirEnts = getushort(b50->bpbRootDirEnts); in mountmsdosfs()
486 pmp->pm_Sectors = getushort(b50->bpbSectors); in mountmsdosfs()
487 pmp->pm_FATsecs = getushort(b50->bpbFATsecs); in mountmsdosfs()
488 pmp->pm_SecPerTrack = getushort(b50->bpbSecPerTrack); in mountmsdosfs()
489 pmp->pm_Heads = getushort(b50->bpbHeads); in mountmsdosfs()
490 pmp->pm_Media = b50->bpbMedia; in mountmsdosfs()
493 pmp->pm_BlkPerSec = pmp->pm_BytesPerSec / DEV_BSIZE; in mountmsdosfs()
501 if (!pmp->pm_BytesPerSec || !SecPerClust) { in mountmsdosfs()
506 if (pmp->pm_Sectors == 0) { in mountmsdosfs()
507 pmp->pm_HiddenSects = getulong(b50->bpbHiddenSecs); in mountmsdosfs()
508 pmp->pm_HugeSectors = getulong(b50->bpbHugeSectors); in mountmsdosfs()
510 pmp->pm_HiddenSects = getushort(b33->bpbHiddenSecs); in mountmsdosfs()
511 pmp->pm_HugeSectors = pmp->pm_Sectors; in mountmsdosfs()
514 if (pmp->pm_RootDirEnts == 0) { in mountmsdosfs()
515 if (pmp->pm_FATsecs in mountmsdosfs()
523 pmp->pm_fatmask = FAT32_MASK; in mountmsdosfs()
524 pmp->pm_fatmult = 4; in mountmsdosfs()
525 pmp->pm_fatdiv = 1; in mountmsdosfs()
526 pmp->pm_FATsecs = getulong(b710->bpbBigFATsecs); in mountmsdosfs()
528 pmp->pm_curfat = getushort(b710->bpbExtFlags) & FATNUM; in mountmsdosfs()
530 pmp->pm_flags |= MSDOSFS_FATMIRROR; in mountmsdosfs()
532 pmp->pm_flags |= MSDOSFS_FATMIRROR; in mountmsdosfs()
543 || (pmp->pm_BytesPerSec < DEV_BSIZE) in mountmsdosfs()
544 || (pmp->pm_BytesPerSec & (pmp->pm_BytesPerSec - 1)) in mountmsdosfs()
545 || (pmp->pm_HugeSectors == 0) in mountmsdosfs()
546 || (pmp->pm_FATsecs == 0) in mountmsdosfs()
547 || (SecPerClust * pmp->pm_BlkPerSec > MAXBSIZE / DEV_BSIZE) in mountmsdosfs()
553 pmp->pm_HugeSectors *= pmp->pm_BlkPerSec; in mountmsdosfs()
554 pmp->pm_HiddenSects *= pmp->pm_BlkPerSec; /* XXX not used? */ in mountmsdosfs()
555 pmp->pm_FATsecs *= pmp->pm_BlkPerSec; in mountmsdosfs()
556 SecPerClust *= pmp->pm_BlkPerSec; in mountmsdosfs()
558 pmp->pm_fatblk = pmp->pm_ResSectors * pmp->pm_BlkPerSec; in mountmsdosfs()
560 if (FAT32(pmp)) { in mountmsdosfs()
561 pmp->pm_rootdirblk = getulong(b710->bpbRootClust); in mountmsdosfs()
562 pmp->pm_firstcluster = pmp->pm_fatblk in mountmsdosfs()
563 + (pmp->pm_FATs * pmp->pm_FATsecs); in mountmsdosfs()
564 pmp->pm_fsinfo = getushort(b710->bpbFSInfo) * pmp->pm_BlkPerSec; in mountmsdosfs()
566 pmp->pm_rootdirblk = pmp->pm_fatblk + in mountmsdosfs()
567 (pmp->pm_FATs * pmp->pm_FATsecs); in mountmsdosfs()
568 pmp->pm_rootdirsize = howmany(pmp->pm_RootDirEnts * in mountmsdosfs()
570 pmp->pm_firstcluster = pmp->pm_rootdirblk + pmp->pm_rootdirsize; in mountmsdosfs()
573 pmp->pm_maxcluster = (pmp->pm_HugeSectors - pmp->pm_firstcluster) / in mountmsdosfs()
575 pmp->pm_fatsize = pmp->pm_FATsecs * DEV_BSIZE; /* XXX not used? */ in mountmsdosfs()
577 if (pmp->pm_fatmask == 0) { in mountmsdosfs()
578 if (pmp->pm_maxcluster in mountmsdosfs()
585 pmp->pm_fatmask = FAT12_MASK; in mountmsdosfs()
586 pmp->pm_fatmult = 3; in mountmsdosfs()
587 pmp->pm_fatdiv = 2; in mountmsdosfs()
589 pmp->pm_fatmask = FAT16_MASK; in mountmsdosfs()
590 pmp->pm_fatmult = 2; in mountmsdosfs()
591 pmp->pm_fatdiv = 1; in mountmsdosfs()
595 clusters = (pmp->pm_fatsize / pmp->pm_fatmult) * pmp->pm_fatdiv; in mountmsdosfs()
596 if (pmp->pm_maxcluster >= clusters) { in mountmsdosfs()
599 "capacity (%ld)\n", pmp->pm_maxcluster + 1, clusters); in mountmsdosfs()
601 pmp->pm_maxcluster = clusters - 1; in mountmsdosfs()
604 if (FAT12(pmp)) in mountmsdosfs()
605 pmp->pm_fatblocksize = 3 * 512; in mountmsdosfs()
607 pmp->pm_fatblocksize = PAGE_SIZE; in mountmsdosfs()
608 pmp->pm_fatblocksize = roundup(pmp->pm_fatblocksize, in mountmsdosfs()
609 pmp->pm_BytesPerSec); in mountmsdosfs()
610 pmp->pm_fatblocksec = pmp->pm_fatblocksize / DEV_BSIZE; in mountmsdosfs()
611 pmp->pm_bnshift = ffs(DEV_BSIZE) - 1; in mountmsdosfs()
617 pmp->pm_bpcluster = SecPerClust * DEV_BSIZE; in mountmsdosfs()
618 pmp->pm_crbomask = pmp->pm_bpcluster - 1; in mountmsdosfs()
619 pmp->pm_cnshift = ffs(pmp->pm_bpcluster) - 1; in mountmsdosfs()
625 if (pmp->pm_bpcluster ^ (1 << pmp->pm_cnshift)) { in mountmsdosfs()
642 if (pmp->pm_fsinfo) { in mountmsdosfs()
645 if ((error = bread(devvp, pmp->pm_fsinfo, pmp->pm_BytesPerSec, in mountmsdosfs()
652 pmp->pm_nxtfree = getulong(fp->fsinxtfree); in mountmsdosfs()
653 if (pmp->pm_nxtfree > pmp->pm_maxcluster) in mountmsdosfs()
654 pmp->pm_nxtfree = CLUST_FIRST; in mountmsdosfs()
656 pmp->pm_fsinfo = 0; in mountmsdosfs()
668 if (pmp->pm_nxtfree < CLUST_FIRST) in mountmsdosfs()
669 pmp->pm_nxtfree = CLUST_FIRST; in mountmsdosfs()
675 pmp->pm_inusemap = malloc(howmany(pmp->pm_maxcluster + 1, N_INUSEBITS) in mountmsdosfs()
676 * sizeof(*pmp->pm_inusemap), in mountmsdosfs()
682 pmp->pm_devvp = devvp; in mountmsdosfs()
683 pmp->pm_dev = dev; in mountmsdosfs()
688 MSDOSFS_LOCK_MP(pmp); in mountmsdosfs()
689 error = fillinusemap(pmp); in mountmsdosfs()
690 MSDOSFS_UNLOCK_MP(pmp); in mountmsdosfs()
701 pmp->pm_flags |= MSDOSFSMNT_WAITONFAT; in mountmsdosfs()
707 pmp->pm_flags |= MSDOSFSMNT_RONLY; in mountmsdosfs()
709 if ((error = markvoldirty(pmp, 1)) != 0) { in mountmsdosfs()
710 (void)markvoldirty(pmp, 0); in mountmsdosfs()
713 pmp->pm_fmod = 1; in mountmsdosfs()
715 mp->mnt_data = pmp; in mountmsdosfs()
733 if (pmp) { in mountmsdosfs()
734 lockdestroy(&pmp->pm_fatlock); in mountmsdosfs()
735 free(pmp->pm_inusemap, M_MSDOSFSFAT); in mountmsdosfs()
736 free(pmp, M_MSDOSFSMNT); in mountmsdosfs()
750 struct msdosfsmount *pmp; in msdosfs_unmount() local
755 pmp = VFSTOMSDOSFS(mp); in msdosfs_unmount()
756 susp = (pmp->pm_flags & MSDOSFSMNT_RONLY) == 0; in msdosfs_unmount()
773 error = markvoldirty(pmp, 0); in msdosfs_unmount()
777 (void)markvoldirty(pmp, 1); in msdosfs_unmount()
781 if (pmp->pm_flags & MSDOSFSMNT_KICONV && msdosfs_iconv) { in msdosfs_unmount()
782 if (pmp->pm_w2u) in msdosfs_unmount()
783 msdosfs_iconv->close(pmp->pm_w2u); in msdosfs_unmount()
784 if (pmp->pm_u2w) in msdosfs_unmount()
785 msdosfs_iconv->close(pmp->pm_u2w); in msdosfs_unmount()
786 if (pmp->pm_d2u) in msdosfs_unmount()
787 msdosfs_iconv->close(pmp->pm_d2u); in msdosfs_unmount()
788 if (pmp->pm_u2d) in msdosfs_unmount()
789 msdosfs_iconv->close(pmp->pm_u2d); in msdosfs_unmount()
794 struct vnode *vp = pmp->pm_devvp; in msdosfs_unmount()
817 g_vfs_close(pmp->pm_cp); in msdosfs_unmount()
819 atomic_store_rel_ptr((uintptr_t *)&pmp->pm_dev->si_mountpt, 0); in msdosfs_unmount()
820 vrele(pmp->pm_devvp); in msdosfs_unmount()
821 dev_rel(pmp->pm_dev); in msdosfs_unmount()
822 free(pmp->pm_inusemap, M_MSDOSFSFAT); in msdosfs_unmount()
823 lockdestroy(&pmp->pm_fatlock); in msdosfs_unmount()
824 free(pmp, M_MSDOSFSMNT); in msdosfs_unmount()
835 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp); in msdosfs_root() local
840 printf("msdosfs_root(); mp %p, pmp %p\n", mp, pmp); in msdosfs_root()
842 error = deget(pmp, MSDOSFSROOT, MSDOSFSROOT_OFS, &ndep); in msdosfs_root()
852 struct msdosfsmount *pmp; in msdosfs_statfs() local
854 pmp = VFSTOMSDOSFS(mp); in msdosfs_statfs()
855 sbp->f_bsize = pmp->pm_bpcluster; in msdosfs_statfs()
856 sbp->f_iosize = pmp->pm_bpcluster; in msdosfs_statfs()
857 sbp->f_blocks = pmp->pm_maxcluster + 1; in msdosfs_statfs()
858 sbp->f_bfree = pmp->pm_freeclustercount; in msdosfs_statfs()
859 sbp->f_bavail = pmp->pm_freeclustercount; in msdosfs_statfs()
860 sbp->f_files = pmp->pm_RootDirEnts; /* XXX */ in msdosfs_statfs()
869 msdosfs_fsiflush(struct msdosfsmount *pmp, int waitfor) in msdosfs_fsiflush() argument
875 MSDOSFS_LOCK_MP(pmp); in msdosfs_fsiflush()
876 if (pmp->pm_fsinfo == 0 || (pmp->pm_flags & MSDOSFS_FSIMOD) == 0) { in msdosfs_fsiflush()
880 error = bread(pmp->pm_devvp, pmp->pm_fsinfo, pmp->pm_BytesPerSec, in msdosfs_fsiflush()
887 putulong(fp->fsinfree, pmp->pm_freeclustercount); in msdosfs_fsiflush()
888 putulong(fp->fsinxtfree, pmp->pm_nxtfree); in msdosfs_fsiflush()
889 pmp->pm_flags &= ~MSDOSFS_FSIMOD; in msdosfs_fsiflush()
895 MSDOSFS_UNLOCK_MP(pmp); in msdosfs_fsiflush()
905 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp); in msdosfs_sync() local
914 if (pmp->pm_fmod != 0) { in msdosfs_sync()
915 if (pmp->pm_flags & MSDOSFSMNT_RONLY) in msdosfs_sync()
955 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY); in msdosfs_sync()
956 error = VOP_FSYNC(pmp->pm_devvp, waitfor, td); in msdosfs_sync()
959 VOP_UNLOCK(pmp->pm_devvp, 0); in msdosfs_sync()
962 error = msdosfs_fsiflush(pmp, waitfor); in msdosfs_sync()
977 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp); in msdosfs_fhtovp() local
982 error = deget(pmp, defhp->defid_dirclust, defhp->defid_dirofs, &dep); in msdosfs_fhtovp()