mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 11:25:21 +01:00
filesystems: use g_vfs_close_unlocked(9)
As result, we lock the devvp vnode around calls to VOP_FSYNC() on unmount. For instance, the vn_fsync_buf() implementation of fsync() needs exclusive lock on the vnode to guarantee that all dirty buffers are indeed synced. Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D59932
This commit is contained in:
1 parent
87962e08fa
commit
53edaad235
5 files changed
+13
-38
No files matched your search
@@ -506,11 +506,8 @@ out:
|
||||
brelse(pribp);
|
||||
if (supbp != NULL)
|
||||
brelse(supbp);
|
||||
if (cp != NULL) {
|
||||
g_topology_lock();
|
||||
g_vfs_close(cp);
|
||||
g_topology_unlock();
|
||||
}
|
||||
if (cp != NULL)
|
||||
g_vfs_close_unlocked(cp);
|
||||
if (isomp) {
|
||||
free(isomp, M_ISOFSMNT);
|
||||
mp->mnt_data = NULL;
|
||||
@@ -541,9 +538,7 @@ cd9660_unmount(struct mount *mp, int mntflags)
|
||||
if (isomp->im_l2d)
|
||||
cd9660_iconv->close(isomp->im_l2d);
|
||||
}
|
||||
g_topology_lock();
|
||||
g_vfs_close(isomp->im_cp);
|
||||
g_topology_unlock();
|
||||
g_vfs_close_unlocked(isomp->im_cp);
|
||||
vrele(isomp->im_devvp);
|
||||
dev_rel(isomp->im_dev);
|
||||
free(isomp, M_ISOFSMNT);
|
||||
|
||||
@@ -837,7 +837,6 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp)
|
||||
struct ext2fs *es;
|
||||
struct cdev *dev = devvp->v_rdev;
|
||||
struct g_consumer *cp;
|
||||
struct bufobj *bo;
|
||||
struct csum *sump;
|
||||
int error;
|
||||
int ronly;
|
||||
@@ -870,9 +869,6 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp)
|
||||
goto out;
|
||||
}
|
||||
|
||||
bo = &devvp->v_bufobj;
|
||||
bo->bo_private = cp;
|
||||
bo->bo_ops = g_vfs_bufops;
|
||||
if (devvp->v_rdev->si_iosize_max != 0)
|
||||
mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max;
|
||||
if (mp->mnt_iosize_max > maxphys)
|
||||
@@ -983,11 +979,8 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp)
|
||||
out:
|
||||
if (bp)
|
||||
brelse(bp);
|
||||
if (cp != NULL) {
|
||||
g_topology_lock();
|
||||
g_vfs_close(cp);
|
||||
g_topology_unlock();
|
||||
}
|
||||
if (cp != NULL)
|
||||
g_vfs_close_unlocked(cp);
|
||||
if (ump) {
|
||||
mtx_destroy(EXT2_MTX(ump));
|
||||
free(ump->um_e2fs->e2fs_gd, M_EXT2MNT);
|
||||
@@ -1029,9 +1022,7 @@ ext2_unmount(struct mount *mp, int mntflags)
|
||||
ext2_sbupdate(ump, MNT_WAIT);
|
||||
}
|
||||
|
||||
g_topology_lock();
|
||||
g_vfs_close(ump->um_cp);
|
||||
g_topology_unlock();
|
||||
g_vfs_close_unlocked(ump->um_cp);
|
||||
vrele(ump->um_devvp);
|
||||
sump = fs->e2fs_clustersum;
|
||||
for (i = 0; i < fs->e2fs_gcount; i++, sump++)
|
||||
|
||||
@@ -863,11 +863,8 @@ mountmsdosfs(struct vnode *odevvp, struct mount *mp)
|
||||
error_exit:
|
||||
if (bp != NULL)
|
||||
brelse(bp);
|
||||
if (cp != NULL) {
|
||||
g_topology_lock();
|
||||
g_vfs_close(cp);
|
||||
g_topology_unlock();
|
||||
}
|
||||
if (cp != NULL)
|
||||
g_vfs_close_unlocked(cp);
|
||||
if (pmp != NULL) {
|
||||
lockdestroy(&pmp->pm_fatlock);
|
||||
free(pmp->pm_inusemap, M_MSDOSFSFAT);
|
||||
|
||||
@@ -496,11 +496,8 @@ bail:
|
||||
free(udfmp, M_UDFMOUNT);
|
||||
if (bp != NULL)
|
||||
brelse(bp);
|
||||
if (cp != NULL) {
|
||||
g_topology_lock();
|
||||
g_vfs_close(cp);
|
||||
g_topology_unlock();
|
||||
}
|
||||
if (cp != NULL)
|
||||
g_vfs_close_unlocked(cp);
|
||||
dev_rel(dev);
|
||||
return error;
|
||||
};
|
||||
@@ -528,9 +525,7 @@ udf_unmount(struct mount *mp, int mntflags)
|
||||
#endif
|
||||
}
|
||||
|
||||
g_topology_lock();
|
||||
g_vfs_close(udfmp->im_cp);
|
||||
g_topology_unlock();
|
||||
g_vfs_close_unlocked(udfmp->im_cp);
|
||||
vrele(udfmp->im_devvp);
|
||||
dev_rel(udfmp->im_dev);
|
||||
|
||||
|
||||
@@ -1202,11 +1202,8 @@ out:
|
||||
free(fs->fs_si, M_UFSMNT);
|
||||
free(fs, M_UFSMNT);
|
||||
}
|
||||
if (cp != NULL) {
|
||||
g_topology_lock();
|
||||
g_vfs_close(cp);
|
||||
g_topology_unlock();
|
||||
}
|
||||
if (cp != NULL)
|
||||
g_vfs_close_unlocked(cp);
|
||||
if (ump != NULL) {
|
||||
mtx_destroy(UFS_MTX(ump));
|
||||
if (mp->mnt_gjprovider != NULL) {
|
||||
|
||||
Reference in new issue
Block a user