Lines Matching defs:pmp
131 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
146 msdosfs_iconv->open(win, local, &pmp->pm_u2w);
147 msdosfs_iconv->open(local, win, &pmp->pm_w2u);
148 msdosfs_iconv->open(dos, local, &pmp->pm_u2d);
149 msdosfs_iconv->open(local, dos, &pmp->pm_d2u);
154 pmp->pm_w2u = NULL;
155 pmp->pm_u2w = NULL;
156 pmp->pm_d2u = NULL;
157 pmp->pm_u2d = NULL;
162 pmp->pm_gid = v;
164 pmp->pm_uid = v;
166 pmp->pm_mask = v & ALLPERMS;
168 pmp->pm_dirmask = v & ALLPERMS;
170 &pmp->pm_flags, MSDOSFSMNT_SHORTNAME);
172 &pmp->pm_flags, MSDOSFSMNT_SHORTNAME);
174 &pmp->pm_flags, MSDOSFSMNT_LONGNAME);
176 &pmp->pm_flags, MSDOSFSMNT_LONGNAME);
178 &pmp->pm_flags, MSDOSFSMNT_KICONV);
181 pmp->pm_flags |= MSDOSFSMNT_NOWIN95;
183 pmp->pm_flags &= ~MSDOSFSMNT_NOWIN95;
185 if (pmp->pm_flags & MSDOSFSMNT_NOWIN95)
186 pmp->pm_flags |= MSDOSFSMNT_SHORTNAME;
188 pmp->pm_flags |= MSDOSFSMNT_LONGNAME;
236 struct msdosfsmount *pmp = NULL;
251 pmp = VFSTOMSDOSFS(mp);
252 if (!(pmp->pm_flags & MSDOSFSMNT_RONLY) &&
273 error = markvoldirty(pmp, 0);
276 (void)markvoldirty(pmp, 1);
282 error = g_access(pmp->pm_cp, 0, -1, 0);
286 (void)markvoldirty(pmp, 1);
294 pmp->pm_fmod = 0;
295 pmp->pm_flags |= MSDOSFSMNT_RONLY;
300 } else if ((pmp->pm_flags & MSDOSFSMNT_RONLY) &&
306 odevvp = pmp->pm_odevvp;
318 error = g_access(pmp->pm_cp, 0, 1, 0);
324 error = markvoldirty_upgrade(pmp, true, true);
331 (void)g_access(pmp->pm_cp, 0, -1, 0);
337 pmp->pm_fmod = 1;
338 pmp->pm_flags &= ~MSDOSFSMNT_RONLY;
348 if ((pmp->pm_flags & MSDOSFS_ERR_RO) != 0)
385 pmp = VFSTOMSDOSFS(mp);
389 if (devvp != pmp->pm_odevvp)
406 printf("msdosfs_mount(): mp %p, pmp %p, inusemap %p\n", mp, pmp, pmp->pm_inusemap);
421 rootdir_free(struct msdosfsmount* pmp)
432 dirclu = pmp->pm_rootdirblk;
438 dirleft = howmany(pmp->pm_rootdirsize * DEV_BSIZE,
448 pmp->pm_BlkPerSec, pmp->pm_fatblocksize, readsize,
449 pmp->pm_firstcluster, dirclu, dirleft, pmp->pm_rootdirsize,
450 pmp->pm_BytesPerSec, pmp->pm_bpcluster);
460 if (bread(pmp->pm_devvp, dirclu, readsize, NOCRED, &bp) != 0) {
505 struct msdosfsmount *pmp;
519 bp = NULL; /* This and pmp both used in error_exit. */
520 pmp = NULL;
572 pmp = malloc(sizeof(*pmp), M_MSDOSFSMNT, M_WAITOK | M_ZERO);
573 pmp->pm_mountp = mp;
574 pmp->pm_cp = cp;
575 pmp->pm_bo = bo;
577 lockinit(&pmp->pm_fatlock, 0, msdosfs_lock_msg, 0, 0);
578 lockinit(&pmp->pm_checkpath_lock, 0, "msdoscp", 0, 0);
580 TASK_INIT(&pmp->pm_rw2ro_task, 0, msdosfs_remount_ro, pmp);
586 pmp->pm_uid = UID_ROOT;
587 pmp->pm_gid = GID_WHEEL;
588 pmp->pm_mask = pmp->pm_dirmask = S_IXUSR | S_IXGRP | S_IXOTH |
597 pmp->pm_BytesPerSec = getushort(b50->bpbBytesPerSec);
598 if (pmp->pm_BytesPerSec < DEV_BSIZE) {
602 pmp->pm_ResSectors = getushort(b50->bpbResSectors);
603 pmp->pm_FATs = b50->bpbFATs;
604 pmp->pm_RootDirEnts = getushort(b50->bpbRootDirEnts);
605 pmp->pm_Sectors = getushort(b50->bpbSectors);
606 pmp->pm_FATsecs = getushort(b50->bpbFATsecs);
607 pmp->pm_SecPerTrack = getushort(b50->bpbSecPerTrack);
608 pmp->pm_Heads = getushort(b50->bpbHeads);
609 pmp->pm_Media = b50->bpbMedia;
612 pmp->pm_BlkPerSec = pmp->pm_BytesPerSec / DEV_BSIZE;
620 if (pmp->pm_BytesPerSec == 0 || SecPerClust == 0) {
625 if (pmp->pm_Sectors == 0) {
626 pmp->pm_HiddenSects = getulong(b50->bpbHiddenSecs);
627 pmp->pm_HugeSectors = getulong(b50->bpbHugeSectors);
629 pmp->pm_HiddenSects = getushort(b33->bpbHiddenSecs);
630 pmp->pm_HugeSectors = pmp->pm_Sectors;
633 if (pmp->pm_RootDirEnts == 0) {
634 if (pmp->pm_FATsecs != 0 || getushort(b710->bpbFSVers) != 0) {
641 pmp->pm_fatmask = FAT32_MASK;
642 pmp->pm_fatmult = 4;
643 pmp->pm_fatdiv = 1;
644 pmp->pm_FATsecs = getulong(b710->bpbBigFATsecs);
646 pmp->pm_curfat = getushort(b710->bpbExtFlags) & FATNUM;
648 pmp->pm_flags |= MSDOSFS_FATMIRROR;
650 pmp->pm_flags |= MSDOSFS_FATMIRROR;
660 pmp->pm_BytesPerSec < DEV_BSIZE ||
661 (pmp->pm_BytesPerSec & (pmp->pm_BytesPerSec - 1)) != 0 ||
662 pmp->pm_HugeSectors == 0 || pmp->pm_FATsecs == 0 ||
663 SecPerClust * pmp->pm_BlkPerSec > MAXBSIZE / DEV_BSIZE) {
668 if ((off_t)pmp->pm_HugeSectors * pmp->pm_BytesPerSec <
669 pmp->pm_HugeSectors /* overflow */ ||
670 (off_t)pmp->pm_HugeSectors * pmp->pm_BytesPerSec >
676 pmp->pm_HugeSectors *= pmp->pm_BlkPerSec;
677 pmp->pm_HiddenSects *= pmp->pm_BlkPerSec; /* XXX not used? */
678 pmp->pm_FATsecs *= pmp->pm_BlkPerSec;
679 SecPerClust *= pmp->pm_BlkPerSec;
681 pmp->pm_fatblk = pmp->pm_ResSectors * pmp->pm_BlkPerSec;
683 if (FAT32(pmp)) {
684 pmp->pm_rootdirblk = getulong(b710->bpbRootClust);
685 pmp->pm_firstcluster = pmp->pm_fatblk +
686 pmp->pm_FATs * pmp->pm_FATsecs;
687 pmp->pm_fsinfo = getushort(b710->bpbFSInfo) * pmp->pm_BlkPerSec;
689 pmp->pm_rootdirblk = pmp->pm_fatblk +
690 pmp->pm_FATs * pmp->pm_FATsecs;
691 pmp->pm_rootdirsize = howmany(pmp->pm_RootDirEnts *
693 pmp->pm_firstcluster = pmp->pm_rootdirblk + pmp->pm_rootdirsize;
696 if (pmp->pm_HugeSectors <= pmp->pm_firstcluster) {
700 pmp->pm_maxcluster = (pmp->pm_HugeSectors - pmp->pm_firstcluster) /
702 pmp->pm_fatsize = pmp->pm_FATsecs * DEV_BSIZE;
704 if (pmp->pm_fatmask == 0) {
709 if (pmp->pm_maxcluster < (CLUST_RSRVD & FAT12_MASK)) {
715 pmp->pm_fatmask = FAT12_MASK;
716 pmp->pm_fatmult = 3;
717 pmp->pm_fatdiv = 2;
719 pmp->pm_fatmask = FAT16_MASK;
720 pmp->pm_fatmult = 2;
721 pmp->pm_fatdiv = 1;
725 clusters = (pmp->pm_fatsize / pmp->pm_fatmult) * pmp->pm_fatdiv;
726 if (clusters >= (CLUST_RSRVD & pmp->pm_fatmask))
727 clusters = CLUST_RSRVD & pmp->pm_fatmask;
728 if (pmp->pm_maxcluster >= clusters) {
731 "capacity (%ld)\n", pmp->pm_maxcluster - 1, clusters);
733 pmp->pm_maxcluster = clusters - 1;
736 if (FAT12(pmp))
737 pmp->pm_fatblocksize = 3 * 512;
739 pmp->pm_fatblocksize = PAGE_SIZE;
740 pmp->pm_fatblocksize = roundup(pmp->pm_fatblocksize,
741 pmp->pm_BytesPerSec);
742 pmp->pm_fatblocksec = pmp->pm_fatblocksize / DEV_BSIZE;
743 pmp->pm_bnshift = ffs(DEV_BSIZE) - 1;
749 pmp->pm_bpcluster = SecPerClust * DEV_BSIZE;
750 pmp->pm_crbomask = pmp->pm_bpcluster - 1;
751 pmp->pm_cnshift = ffs(pmp->pm_bpcluster) - 1;
757 if ((pmp->pm_bpcluster ^ (1 << pmp->pm_cnshift)) != 0) {
774 if (pmp->pm_fsinfo) {
777 if ((error = bread(devvp, pmp->pm_fsinfo, pmp->pm_BytesPerSec,
784 pmp->pm_nxtfree = getulong(fp->fsinxtfree);
785 if (pmp->pm_nxtfree > pmp->pm_maxcluster)
786 pmp->pm_nxtfree = CLUST_FIRST;
788 pmp->pm_fsinfo = 0;
794 * Finish initializing pmp->pm_nxtfree (just in case the first few
797 * value if there is no fsinfo. We will use pmp->pm_nxtfree
800 if (pmp->pm_nxtfree < CLUST_FIRST)
801 pmp->pm_nxtfree = CLUST_FIRST;
807 pmp->pm_inusemap = malloc(howmany(pmp->pm_maxcluster + 1,
808 N_INUSEBITS) * sizeof(*pmp->pm_inusemap), M_MSDOSFSFAT, M_WAITOK);
813 pmp->pm_devvp = devvp;
814 pmp->pm_odevvp = odevvp;
815 pmp->pm_dev = dev;
820 MSDOSFS_LOCK_MP(pmp);
821 error = fillinusemap(pmp);
822 MSDOSFS_UNLOCK_MP(pmp);
833 pmp->pm_flags |= MSDOSFSMNT_WAITONFAT;
839 pmp->pm_flags |= MSDOSFSMNT_RONLY;
841 if ((error = markvoldirty(pmp, 1)) != 0)
843 pmp->pm_fmod = 1;
846 if (FAT32(pmp)) {
847 pmp->pm_rootdirfree = 0;
849 pmp->pm_rootdirfree = rootdir_free(pmp);
850 if (pmp->pm_rootdirfree < 0)
854 mp->mnt_data = pmp;
872 if (pmp != NULL) {
873 lockdestroy(&pmp->pm_fatlock);
874 lockdestroy(&pmp->pm_checkpath_lock);
875 free(pmp->pm_inusemap, M_MSDOSFSFAT);
876 free(pmp, M_MSDOSFSMNT);
895 struct msdosfsmount *pmp;
900 pmp = VFSTOMSDOSFS(mp);
901 susp = (pmp->pm_flags & MSDOSFSMNT_RONLY) == 0;
918 error = markvoldirty(pmp, 0);
922 (void)markvoldirty(pmp, 1);
926 if (pmp->pm_flags & MSDOSFSMNT_KICONV && msdosfs_iconv) {
927 if (pmp->pm_w2u)
928 msdosfs_iconv->close(pmp->pm_w2u);
929 if (pmp->pm_u2w)
930 msdosfs_iconv->close(pmp->pm_u2w);
931 if (pmp->pm_d2u)
932 msdosfs_iconv->close(pmp->pm_d2u);
933 if (pmp->pm_u2d)
934 msdosfs_iconv->close(pmp->pm_u2d);
939 struct vnode *vp = pmp->pm_devvp;
961 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY);
963 g_vfs_close(pmp->pm_cp);
965 BO_LOCK(&pmp->pm_odevvp->v_bufobj);
966 pmp->pm_odevvp->v_bufobj.bo_flag &= ~BO_NOBUFS;
967 BO_UNLOCK(&pmp->pm_odevvp->v_bufobj);
968 atomic_store_rel_ptr((uintptr_t *)&pmp->pm_dev->si_mountpt, 0);
969 mntfs_freevp(pmp->pm_devvp);
970 vrele(pmp->pm_odevvp);
971 dev_rel(pmp->pm_dev);
972 free(pmp->pm_inusemap, M_MSDOSFSFAT);
973 lockdestroy(&pmp->pm_fatlock);
974 lockdestroy(&pmp->pm_checkpath_lock);
975 free(pmp, M_MSDOSFSMNT);
983 struct msdosfsmount *pmp;
986 pmp = arg;
988 MSDOSFS_LOCK_MP(pmp);
989 if ((pmp->pm_flags & MSDOSFS_ERR_RO) != 0) {
990 while ((pmp->pm_flags & MSDOSFS_ERR_RO) != 0)
991 msleep(&pmp->pm_flags, &pmp->pm_fatlock, PVFS,
993 } else if ((pmp->pm_mountp->mnt_flag & MNT_RDONLY) == 0) {
994 pmp->pm_flags |= MSDOSFS_ERR_RO;
995 MSDOSFS_UNLOCK_MP(pmp);
997 pmp->pm_mountp->mnt_stat.f_mntfromname);
998 error = vfs_remount_ro(pmp->pm_mountp);
1001 pmp->pm_mountp->mnt_stat.f_mntfromname, error);
1004 pmp->pm_mountp->mnt_stat.f_mntfromname);
1005 MSDOSFS_LOCK_MP(pmp);
1006 pmp->pm_flags &= ~MSDOSFS_ERR_RO;
1007 wakeup(&pmp->pm_flags);
1009 MSDOSFS_UNLOCK_MP(pmp);
1012 vfs_unbusy(pmp->pm_mountp);
1016 msdosfs_integrity_error(struct msdosfsmount *pmp)
1020 error = vfs_busy(pmp->pm_mountp, MBF_NOWAIT);
1023 &pmp->pm_rw2ro_task);
1027 pmp->pm_mountp->mnt_stat.f_mntfromname, error);
1028 vfs_unbusy(pmp->pm_mountp);
1032 pmp->pm_mountp->mnt_stat.f_mntfromname, error);
1039 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
1044 printf("msdosfs_root(); mp %p, pmp %p\n", mp, pmp);
1046 error = deget(pmp, MSDOSFSROOT, MSDOSFSROOT_OFS, LK_EXCLUSIVE, &ndep);
1056 struct msdosfsmount *pmp;
1058 pmp = VFSTOMSDOSFS(mp);
1059 sbp->f_bsize = pmp->pm_bpcluster;
1060 sbp->f_iosize = pmp->pm_bpcluster;
1061 sbp->f_blocks = pmp->pm_maxcluster - CLUST_FIRST + 1;
1062 sbp->f_bfree = pmp->pm_freeclustercount;
1063 sbp->f_bavail = pmp->pm_freeclustercount;
1064 sbp->f_files = howmany(pmp->pm_rootdirsize * DEV_BSIZE,
1066 sbp->f_ffree = pmp->pm_rootdirfree;
1074 msdosfs_fsiflush(struct msdosfsmount *pmp, int waitfor)
1080 MSDOSFS_LOCK_MP(pmp);
1081 if (pmp->pm_fsinfo == 0 || (pmp->pm_flags & MSDOSFS_FSIMOD) == 0) {
1085 error = bread(pmp->pm_devvp, pmp->pm_fsinfo, pmp->pm_BytesPerSec,
1091 putulong(fp->fsinfree, pmp->pm_freeclustercount);
1092 putulong(fp->fsinxtfree, pmp->pm_nxtfree);
1093 pmp->pm_flags &= ~MSDOSFS_FSIMOD;
1099 MSDOSFS_UNLOCK_MP(pmp);
1109 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
1118 if (pmp->pm_fmod != 0) {
1119 if (pmp->pm_flags & MSDOSFSMNT_RONLY)
1160 vn_lock(pmp->pm_devvp, LK_EXCLUSIVE | LK_RETRY);
1161 error = VOP_FSYNC(pmp->pm_devvp, waitfor, td);
1164 VOP_UNLOCK(pmp->pm_devvp);
1167 error = msdosfs_fsiflush(pmp, waitfor);
1182 struct msdosfsmount *pmp = VFSTOMSDOSFS(mp);
1187 error = deget(pmp, defhp->defid_dirclust, defhp->defid_dirofs,