Author: attilio
Date: Sat Nov 10 19:32:16 2012
New Revision: 242875
URL: http://svnweb.freebsd.org/changeset/base/242875

Log:
  - Protect mnt_data and mnt_flags under the mount interlock
  - Move mp->mnt_stat manipulation where all of them happens
  
  Reported by:  davide
  Discussed with:       kib
  Tested by:    flo
  MFC after:    2 months
  X-MFC:                241519, 242536,242616, 242727

Modified:
  head/sys/fs/fuse/fuse_vfsops.c

Modified: head/sys/fs/fuse/fuse_vfsops.c
==============================================================================
--- head/sys/fs/fuse/fuse_vfsops.c      Sat Nov 10 16:08:21 2012        
(r242874)
+++ head/sys/fs/fuse/fuse_vfsops.c      Sat Nov 10 19:32:16 2012        
(r242875)
@@ -234,8 +234,10 @@ fuse_vfsop_mount(struct mount *mp)
        if (mp->mnt_flag & MNT_UPDATE)
                return EOPNOTSUPP;
 
+       MNT_ILOCK(mp);
        mp->mnt_flag |= MNT_SYNCHRONOUS;
        mp->mnt_data = NULL;
+       MNT_IUNLOCK(mp);
        /* Get the new options passed to mount */
        opts = mp->mnt_optnew;
 
@@ -323,22 +325,20 @@ fuse_vfsop_mount(struct mount *mp)
                FUSE_UNLOCK();
                goto out;
        }
-       /* We need this here as this slot is used by getnewvnode() */
-       mp->mnt_stat.f_iosize = PAGE_SIZE;
-       mp->mnt_data = data;
        data->ref++;
        data->mp = mp;
        data->dataflags |= mntopts;
        data->max_read = max_read;
        data->daemon_timeout = daemon_timeout;
-#ifdef XXXIP
-       if (!priv_check(td, PRIV_VFS_FUSE_SYNC_UNMOUNT))
-               data->dataflags |= FSESS_CAN_SYNC_UNMOUNT;
-#endif
        FUSE_UNLOCK();
 
        vfs_getnewfsid(mp);
+       MNT_ILOCK(mp);
+       mp->mnt_data = data;
        mp->mnt_flag |= MNT_LOCAL;
+       MNT_IUNLOCK(mp);
+       /* We need this here as this slot is used by getnewvnode() */
+       mp->mnt_stat.f_iosize = PAGE_SIZE;
        if (subtype) {
                strlcat(mp->mnt_stat.f_fstypename, ".", MFSNAMELEN);
                strlcat(mp->mnt_stat.f_fstypename, subtype, MFSNAMELEN);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to