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"

Reply via email to