ffs: fix newly introduced LOR between mntfs vnode lock and topology lock
The mntfs vnode lock should be before topology, as established in ffs_mountfs(). Extend the locked region in ffs_unmount(). Reported and reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D33013
This commit is contained in:
parent
16bea05ac3
commit
c34a5148e8
@ -309,9 +309,7 @@ g_vfs_close(struct g_consumer *cp)
|
|||||||
gp = cp->geom;
|
gp = cp->geom;
|
||||||
sc = gp->softc;
|
sc = gp->softc;
|
||||||
vp = cp->private;
|
vp = cp->private;
|
||||||
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
|
|
||||||
bufobj_invalbuf(sc->sc_bo, V_SAVE, 0, 0);
|
bufobj_invalbuf(sc->sc_bo, V_SAVE, 0, 0);
|
||||||
VOP_UNLOCK(vp);
|
|
||||||
sc->sc_bo->bo_private = cp->private;
|
sc->sc_bo->bo_private = cp->private;
|
||||||
gp->softc = NULL;
|
gp->softc = NULL;
|
||||||
mtx_destroy(&sc->sc_mtx);
|
mtx_destroy(&sc->sc_mtx);
|
||||||
|
@ -1431,6 +1431,7 @@ ffs_unmount(mp, mntflags)
|
|||||||
taskqueue_free(ump->um_trim_tq);
|
taskqueue_free(ump->um_trim_tq);
|
||||||
free (ump->um_trimhash, M_TRIM);
|
free (ump->um_trimhash, M_TRIM);
|
||||||
}
|
}
|
||||||
|
vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY);
|
||||||
g_topology_lock();
|
g_topology_lock();
|
||||||
g_vfs_close(ump->um_cp);
|
g_vfs_close(ump->um_cp);
|
||||||
g_topology_unlock();
|
g_topology_unlock();
|
||||||
@ -1438,7 +1439,6 @@ ffs_unmount(mp, mntflags)
|
|||||||
ump->um_odevvp->v_bufobj.bo_flag &= ~BO_NOBUFS;
|
ump->um_odevvp->v_bufobj.bo_flag &= ~BO_NOBUFS;
|
||||||
BO_UNLOCK(&ump->um_odevvp->v_bufobj);
|
BO_UNLOCK(&ump->um_odevvp->v_bufobj);
|
||||||
atomic_store_rel_ptr((uintptr_t *)&ump->um_dev->si_mountpt, 0);
|
atomic_store_rel_ptr((uintptr_t *)&ump->um_dev->si_mountpt, 0);
|
||||||
vn_lock(ump->um_devvp, LK_EXCLUSIVE | LK_RETRY);
|
|
||||||
mntfs_freevp(ump->um_devvp);
|
mntfs_freevp(ump->um_devvp);
|
||||||
vrele(ump->um_odevvp);
|
vrele(ump->um_odevvp);
|
||||||
dev_rel(ump->um_dev);
|
dev_rel(ump->um_dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user