Author: dumbbell Date: Mon Apr 30 15:46:41 2012 New Revision: 234845 URL: http://svn.freebsd.org/changeset/base/234845
Log: MFC r233575: Make ReiserFS MPSAFE Most functions seemed to be already fine w.r.t. what's done in msdosfs. Modified: stable/9/sys/gnu/fs/reiserfs/reiserfs_vfsops.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/gnu/fs/reiserfs/reiserfs_vfsops.c ============================================================================== --- stable/9/sys/gnu/fs/reiserfs/reiserfs_vfsops.c Mon Apr 30 13:44:04 2012 (r234844) +++ stable/9/sys/gnu/fs/reiserfs/reiserfs_vfsops.c Mon Apr 30 15:46:41 2012 (r234845) @@ -231,6 +231,7 @@ reiserfs_unmount(struct mount *mp, int m g_topology_unlock(); PICKUP_GIANT(); vrele(rmp->rm_devvp); + dev_rel(rmp->rm_dev); if (sbi) { reiserfs_log(LOG_DEBUG, "free sbi\n"); @@ -430,21 +431,25 @@ reiserfs_mountfs(struct vnode *devvp, st struct reiserfs_mount *rmp; struct reiserfs_sb_info *sbi; struct reiserfs_super_block *rs; - struct cdev *dev = devvp->v_rdev; + struct cdev *dev; struct g_consumer *cp; struct bufobj *bo; //ronly = (mp->mnt_flag & MNT_RDONLY) != 0; + dev = devvp->v_rdev; + dev_ref(dev); DROP_GIANT(); g_topology_lock(); error = g_vfs_open(devvp, &cp, "reiserfs", /* read-only */ 0); g_topology_unlock(); PICKUP_GIANT(); VOP_UNLOCK(devvp, 0); - if (error) + if (error) { + dev_rel(dev); return (error); + } bo = &devvp->v_bufobj; bo->bo_private = cp; @@ -575,6 +580,7 @@ reiserfs_mountfs(struct vnode *devvp, st mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; MNT_ILOCK(mp); mp->mnt_flag |= MNT_LOCAL; + mp->mnt_kern_flag |= MNTK_MPSAFE; MNT_IUNLOCK(mp); #if defined(si_mountpoint) devvp->v_rdev->si_mountpoint = mp; @@ -590,7 +596,8 @@ out: for (i = 0; i < SB_BMAP_NR(sbi); i++) { if (!SB_AP_BITMAP(sbi)[i].bp_data) break; - free(SB_AP_BITMAP(sbi)[i].bp_data, M_REISERFSMNT); + free(SB_AP_BITMAP(sbi)[i].bp_data, + M_REISERFSMNT); } free(SB_AP_BITMAP(sbi), M_REISERFSMNT); } @@ -613,6 +620,7 @@ out: free(sbi, M_REISERFSMNT); if (rmp) free(rmp, M_REISERFSMNT); + dev_rel(dev); return (error); } _______________________________________________ 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"