kernel -- tmpfs: MPSAFE tmpfs_getattr.
authorVenkatesh Srinivas <me@endeavour.zapto.org>
Thu, 20 Jan 2011 02:35:51 +0000 (18:35 -0800)
committerVenkatesh Srinivas <me@endeavour.zapto.org>
Thu, 20 Jan 2011 02:35:51 +0000 (18:35 -0800)
Use the per-mount token to synchronize tmpfs_getattr.

sys/vfs/tmpfs/tmpfs_vfsops.c
sys/vfs/tmpfs/tmpfs_vnops.c

index f5af54f..08c1c32 100644 (file)
@@ -269,7 +269,7 @@ tmpfs_mount(struct mount *mp, char *path, caddr_t data, struct ucred *cred)
        mp->mnt_kern_flag |= MNTK_RD_MPSAFE | MNTK_WR_MPSAFE | MNTK_GA_MPSAFE  |
                             MNTK_IN_MPSAFE | MNTK_SG_MPSAFE;
 #endif
-       mp->mnt_kern_flag |= MNTK_RD_MPSAFE | MNTK_SG_MPSAFE;
+       mp->mnt_kern_flag |= MNTK_RD_MPSAFE | MNTK_GA_MPSAFE | MNTK_SG_MPSAFE;
        mp->mnt_kern_flag |= MNTK_NOMSYNC;
        mp->mnt_data = (qaddr_t)tmp;
        vfs_getnewfsid(mp);
index 022c156..2dd36a7 100644 (file)
@@ -303,6 +303,7 @@ tmpfs_getattr(struct vop_getattr_args *v)
 
        node = VP_TO_TMPFS_NODE(vp);
 
+       lwkt_gettoken(&vp->v_mount->mnt_token);
        tmpfs_update(vp);
 
        vap->va_type = vp->v_type;
@@ -330,6 +331,8 @@ tmpfs_getattr(struct vop_getattr_args *v)
        vap->va_bytes = round_page(node->tn_size);
        vap->va_filerev = 0;
 
+       lwkt_reltoken(&vp->v_mount->mnt_token);
+
        return 0;
 }