Author: kib
Date: Sat May 21 10:13:25 2016
New Revision: 300366
URL: https://svnweb.freebsd.org/changeset/base/300366

Log:
  Stop dropping and reacquiring Giant around geom calls in UFS.
  
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/ufs/ffs/ffs_vfsops.c

Modified: head/sys/ufs/ffs/ffs_vfsops.c
==============================================================================
--- head/sys/ufs/ffs/ffs_vfsops.c       Sat May 21 09:55:32 2016        
(r300365)
+++ head/sys/ufs/ffs/ffs_vfsops.c       Sat May 21 10:13:25 2016        
(r300366)
@@ -239,14 +239,12 @@ ffs_mount(struct mount *mp)
                        if ((error = ffs_flushfiles(mp, WRITECLOSE, td)) != 0 ||
                            (error = ffs_sbupdate(ump, MNT_WAIT, 0)) != 0)
                                return (error);
-                       DROP_GIANT();
                        g_topology_lock();
                        /*
                         * Return to normal read-only mode.
                         */
                        error = g_access(ump->um_cp, 0, -1, 0);
                        g_topology_unlock();
-                       PICKUP_GIANT();
                        ump->um_fsckpid = 0;
                }
                if (fs->fs_ronly == 0 &&
@@ -294,14 +292,12 @@ ffs_mount(struct mount *mp)
                        }
                        if (MOUNTEDSOFTDEP(mp))
                                softdep_unmount(mp);
-                       DROP_GIANT();
                        g_topology_lock();
                        /*
                         * Drop our write and exclusive access.
                         */
                        g_access(ump->um_cp, 0, -1, -1);
                        g_topology_unlock();
-                       PICKUP_GIANT();
                        fs->fs_ronly = 1;
                        MNT_ILOCK(mp);
                        mp->mnt_flag |= MNT_RDONLY;
@@ -359,14 +355,12 @@ ffs_mount(struct mount *mp)
                                        return (EPERM);
                                }
                        }
-                       DROP_GIANT();
                        g_topology_lock();
                        /*
                         * Request exclusive write access.
                         */
                        error = g_access(ump->um_cp, 0, 1, 1);
                        g_topology_unlock();
-                       PICKUP_GIANT();
                        if (error)
                                return (error);
                        if ((error = vn_start_write(NULL, &mp, V_WAIT)) != 0)
@@ -433,14 +427,12 @@ ffs_mount(struct mount *mp)
                        }
                        KASSERT(MOUNTEDSOFTDEP(mp) == 0,
                            ("soft updates enabled on read-only file system"));
-                       DROP_GIANT();
                        g_topology_lock();
                        /*
                         * Request write access.
                         */
                        error = g_access(ump->um_cp, 0, 1, 0);
                        g_topology_unlock();
-                       PICKUP_GIANT();
                        if (error) {
                                vfs_mount_error(mp,
                                    "Checker activation failed on %s",
@@ -523,14 +515,12 @@ ffs_mount(struct mount *mp)
                            ("soft updates enabled on read-only file system"));
                        ump = VFSTOUFS(mp);
                        fs = ump->um_fs;
-                       DROP_GIANT();
                        g_topology_lock();
                        /*
                         * Request write access.
                         */
                        error = g_access(ump->um_cp, 0, 1, 0);
                        g_topology_unlock();
-                       PICKUP_GIANT();
                        if (error) {
                                printf("WARNING: %s: Checker activation "
                                    "failed\n", fs->fs_fsmnt);
@@ -771,11 +761,9 @@ ffs_mountfs(devvp, mp, td)
                VOP_UNLOCK(devvp, 0);
                return (EBUSY);
        }
-       DROP_GIANT();
        g_topology_lock();
        error = g_vfs_open(devvp, &cp, "ffs", ronly ? 0 : 1);
        g_topology_unlock();
-       PICKUP_GIANT();
        if (error != 0) {
                atomic_store_rel_ptr((uintptr_t *)&dev->si_mountpt, 0);
                VOP_UNLOCK(devvp, 0);
@@ -1090,11 +1078,9 @@ out:
        if (bp)
                brelse(bp);
        if (cp != NULL) {
-               DROP_GIANT();
                g_topology_lock();
                g_vfs_close(cp);
                g_topology_unlock();
-               PICKUP_GIANT();
        }
        if (ump) {
                mtx_destroy(UFS_MTX(ump));
@@ -1280,7 +1266,6 @@ ffs_unmount(mp, mntflags)
                taskqueue_drain_all(ump->um_trim_tq);
                taskqueue_free(ump->um_trim_tq);
        }
-       DROP_GIANT();
        g_topology_lock();
        if (ump->um_fsckpid > 0) {
                /*
@@ -1291,7 +1276,6 @@ ffs_unmount(mp, mntflags)
        }
        g_vfs_close(ump->um_cp);
        g_topology_unlock();
-       PICKUP_GIANT();
        atomic_store_rel_ptr((uintptr_t *)&ump->um_dev->si_mountpt, 0);
        vrele(ump->um_devvp);
        dev_rel(ump->um_dev);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to