Author: asomers
Date: Fri Sep 23 19:05:07 2016
New Revision: 306276
URL: https://svnweb.freebsd.org/changeset/base/306276

Log:
  Mount msdosfs with longnames support by default.
  
  The old behavior depended on the FAT version and on what files were in the
  root directory. "mount_msdosfs -o shortnames" is still supported.
  
  Reviewed by:  wblock, cem
  Discussed with:       trasz, adrian, imp
  MFC after:    4 weeks
  X-MFC-Notes:  Don't MFC the removal of findwin95
  Differential Revision:        https://reviews.freebsd.org/D8018

Modified:
  head/sbin/mount_msdosfs/mount_msdosfs.8
  head/sys/fs/msdosfs/denode.h
  head/sys/fs/msdosfs/msdosfs_lookup.c
  head/sys/fs/msdosfs/msdosfs_vfsops.c
  head/sys/sys/param.h

Modified: head/sbin/mount_msdosfs/mount_msdosfs.8
==============================================================================
--- head/sbin/mount_msdosfs/mount_msdosfs.8     Fri Sep 23 18:55:32 2016        
(r306275)
+++ head/sbin/mount_msdosfs/mount_msdosfs.8     Fri Sep 23 19:05:07 2016        
(r306276)
@@ -142,15 +142,8 @@ If neither
 nor
 .Fl l
 are given,
-.Nm
-searches the root directory of the file system to
-be mounted for any existing Win'95 long filenames.
-If no such entries are found, but short DOS filenames are found,
-.Fl s
-is the default.
-Otherwise
 .Fl l
-is assumed.
+is the default.
 .It Fl 9
 Ignore the special Win'95 directory entries even
 if deleting or renaming a file.

Modified: head/sys/fs/msdosfs/denode.h
==============================================================================
--- head/sys/fs/msdosfs/denode.h        Fri Sep 23 18:55:32 2016        
(r306275)
+++ head/sys/fs/msdosfs/denode.h        Fri Sep 23 19:05:07 2016        
(r306276)
@@ -265,7 +265,6 @@ int msdosfs_reclaim(struct vop_reclaim_a
  */
 int deget(struct msdosfsmount *, u_long, u_long, struct denode **);
 int uniqdosname(struct denode *, struct componentname *, u_char *);
-int findwin95(struct denode *);
 
 int readep(struct msdosfsmount *pmp, u_long dirclu, u_long dirofs,  struct buf 
**bpp, struct direntry **epp);
 int readde(struct denode *dep, struct buf **bpp, struct direntry **epp);

Modified: head/sys/fs/msdosfs/msdosfs_lookup.c
==============================================================================
--- head/sys/fs/msdosfs/msdosfs_lookup.c        Fri Sep 23 18:55:32 2016        
(r306275)
+++ head/sys/fs/msdosfs/msdosfs_lookup.c        Fri Sep 23 19:05:07 2016        
(r306276)
@@ -1062,55 +1062,3 @@ uniqdosname(struct denode *dep, struct c
                }
        }
 }
-
-/*
- * Find any Win'95 long filename entry in directory dep
- */
-int
-findwin95(struct denode *dep)
-{
-       struct msdosfsmount *pmp = dep->de_pmp;
-       struct direntry *dentp;
-       int blsize, win95;
-       u_long cn;
-       daddr_t bn;
-       struct buf *bp;
-
-       win95 = 1;
-       /*
-        * Read through the directory looking for Win'95 entries
-        * Note: Error currently handled just as EOF                    XXX
-        */
-       for (cn = 0;; cn++) {
-               if (pcbmap(dep, cn, &bn, 0, &blsize))
-                       return (win95);
-               if (bread(pmp->pm_devvp, bn, blsize, NOCRED, &bp)) {
-                       brelse(bp);
-                       return (win95);
-               }
-               for (dentp = (struct direntry *)bp->b_data;
-                    (char *)dentp < bp->b_data + blsize;
-                    dentp++) {
-                       if (dentp->deName[0] == SLOT_EMPTY) {
-                               /*
-                                * Last used entry and not found
-                                */
-                               brelse(bp);
-                               return (win95);
-                       }
-                       if (dentp->deName[0] == SLOT_DELETED) {
-                               /*
-                                * Ignore deleted files
-                                * Note: might be an indication of Win'95 
anyway        XXX
-                                */
-                               continue;
-                       }
-                       if (dentp->deAttributes == ATTR_WIN95) {
-                               brelse(bp);
-                               return 1;
-                       }
-                       win95 = 0;
-               }
-               brelse(bp);
-       }
-}

Modified: head/sys/fs/msdosfs/msdosfs_vfsops.c
==============================================================================
--- head/sys/fs/msdosfs/msdosfs_vfsops.c        Fri Sep 23 18:55:32 2016        
(r306275)
+++ head/sys/fs/msdosfs/msdosfs_vfsops.c        Fri Sep 23 19:05:07 2016        
(r306276)
@@ -175,24 +175,8 @@ update_mp(struct mount *mp, struct threa
 
        if (pmp->pm_flags & MSDOSFSMNT_NOWIN95)
                pmp->pm_flags |= MSDOSFSMNT_SHORTNAME;
-       else if (!(pmp->pm_flags &
-           (MSDOSFSMNT_SHORTNAME | MSDOSFSMNT_LONGNAME))) {
-               struct vnode *rootvp;
-
-               /*
-                * Try to divine whether to support Win'95 long filenames
-                */
-               if (FAT32(pmp))
-                       pmp->pm_flags |= MSDOSFSMNT_LONGNAME;
-               else {
-                       if ((error =
-                           msdosfs_root(mp, LK_EXCLUSIVE, &rootvp)) != 0)
-                               return error;
-                       pmp->pm_flags |= findwin95(VTODE(rootvp)) ?
-                           MSDOSFSMNT_LONGNAME : MSDOSFSMNT_SHORTNAME;
-                       vput(rootvp);
-               }
-       }
+       else
+               pmp->pm_flags |= MSDOSFSMNT_LONGNAME;
        return 0;
 }
 

Modified: head/sys/sys/param.h
==============================================================================
--- head/sys/sys/param.h        Fri Sep 23 18:55:32 2016        (r306275)
+++ head/sys/sys/param.h        Fri Sep 23 19:05:07 2016        (r306276)
@@ -58,7 +58,7 @@
  *             in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1200009      /* Master, propagated to newvers */
+#define __FreeBSD_version 1200010      /* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to