Date: Sat, 10 Nov 2012 19:32:17 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r242875 - head/sys/fs/fuse Message-ID: <201211101932.qAAJWHeY092962@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211101932.qAAJWHeY092962>