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);
|
brelse(pribp);
|
||||||
if (supbp != NULL)
|
if (supbp != NULL)
|
||||||
brelse(supbp);
|
brelse(supbp);
|
||||||
if (cp != NULL) {
|
if (cp != NULL)
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(cp);
|
||||||
g_vfs_close(cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
}
|
|
||||||
if (isomp) {
|
if (isomp) {
|
||||||
free(isomp, M_ISOFSMNT);
|
free(isomp, M_ISOFSMNT);
|
||||||
mp->mnt_data = NULL;
|
mp->mnt_data = NULL;
|
||||||
@@ -541,9 +538,7 @@ cd9660_unmount(struct mount *mp, int mntflags)
|
|||||||
if (isomp->im_l2d)
|
if (isomp->im_l2d)
|
||||||
cd9660_iconv->close(isomp->im_l2d);
|
cd9660_iconv->close(isomp->im_l2d);
|
||||||
}
|
}
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(isomp->im_cp);
|
||||||
g_vfs_close(isomp->im_cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
vrele(isomp->im_devvp);
|
vrele(isomp->im_devvp);
|
||||||
dev_rel(isomp->im_dev);
|
dev_rel(isomp->im_dev);
|
||||||
free(isomp, M_ISOFSMNT);
|
free(isomp, M_ISOFSMNT);
|
||||||
|
|||||||
@@ -837,7 +837,6 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp)
|
|||||||
struct ext2fs *es;
|
struct ext2fs *es;
|
||||||
struct cdev *dev = devvp->v_rdev;
|
struct cdev *dev = devvp->v_rdev;
|
||||||
struct g_consumer *cp;
|
struct g_consumer *cp;
|
||||||
struct bufobj *bo;
|
|
||||||
struct csum *sump;
|
struct csum *sump;
|
||||||
int error;
|
int error;
|
||||||
int ronly;
|
int ronly;
|
||||||
@@ -870,9 +869,6 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
bo = &devvp->v_bufobj;
|
|
||||||
bo->bo_private = cp;
|
|
||||||
bo->bo_ops = g_vfs_bufops;
|
|
||||||
if (devvp->v_rdev->si_iosize_max != 0)
|
if (devvp->v_rdev->si_iosize_max != 0)
|
||||||
mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max;
|
mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max;
|
||||||
if (mp->mnt_iosize_max > maxphys)
|
if (mp->mnt_iosize_max > maxphys)
|
||||||
@@ -983,11 +979,8 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp)
|
|||||||
out:
|
out:
|
||||||
if (bp)
|
if (bp)
|
||||||
brelse(bp);
|
brelse(bp);
|
||||||
if (cp != NULL) {
|
if (cp != NULL)
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(cp);
|
||||||
g_vfs_close(cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
}
|
|
||||||
if (ump) {
|
if (ump) {
|
||||||
mtx_destroy(EXT2_MTX(ump));
|
mtx_destroy(EXT2_MTX(ump));
|
||||||
free(ump->um_e2fs->e2fs_gd, M_EXT2MNT);
|
free(ump->um_e2fs->e2fs_gd, M_EXT2MNT);
|
||||||
@@ -1029,9 +1022,7 @@ ext2_unmount(struct mount *mp, int mntflags)
|
|||||||
ext2_sbupdate(ump, MNT_WAIT);
|
ext2_sbupdate(ump, MNT_WAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(ump->um_cp);
|
||||||
g_vfs_close(ump->um_cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
vrele(ump->um_devvp);
|
vrele(ump->um_devvp);
|
||||||
sump = fs->e2fs_clustersum;
|
sump = fs->e2fs_clustersum;
|
||||||
for (i = 0; i < fs->e2fs_gcount; i++, sump++)
|
for (i = 0; i < fs->e2fs_gcount; i++, sump++)
|
||||||
|
|||||||
@@ -863,11 +863,8 @@ mountmsdosfs(struct vnode *odevvp, struct mount *mp)
|
|||||||
error_exit:
|
error_exit:
|
||||||
if (bp != NULL)
|
if (bp != NULL)
|
||||||
brelse(bp);
|
brelse(bp);
|
||||||
if (cp != NULL) {
|
if (cp != NULL)
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(cp);
|
||||||
g_vfs_close(cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
}
|
|
||||||
if (pmp != NULL) {
|
if (pmp != NULL) {
|
||||||
lockdestroy(&pmp->pm_fatlock);
|
lockdestroy(&pmp->pm_fatlock);
|
||||||
free(pmp->pm_inusemap, M_MSDOSFSFAT);
|
free(pmp->pm_inusemap, M_MSDOSFSFAT);
|
||||||
|
|||||||
@@ -496,11 +496,8 @@ bail:
|
|||||||
free(udfmp, M_UDFMOUNT);
|
free(udfmp, M_UDFMOUNT);
|
||||||
if (bp != NULL)
|
if (bp != NULL)
|
||||||
brelse(bp);
|
brelse(bp);
|
||||||
if (cp != NULL) {
|
if (cp != NULL)
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(cp);
|
||||||
g_vfs_close(cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
}
|
|
||||||
dev_rel(dev);
|
dev_rel(dev);
|
||||||
return error;
|
return error;
|
||||||
};
|
};
|
||||||
@@ -528,9 +525,7 @@ udf_unmount(struct mount *mp, int mntflags)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(udfmp->im_cp);
|
||||||
g_vfs_close(udfmp->im_cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
vrele(udfmp->im_devvp);
|
vrele(udfmp->im_devvp);
|
||||||
dev_rel(udfmp->im_dev);
|
dev_rel(udfmp->im_dev);
|
||||||
|
|
||||||
|
|||||||
@@ -1202,11 +1202,8 @@ out:
|
|||||||
free(fs->fs_si, M_UFSMNT);
|
free(fs->fs_si, M_UFSMNT);
|
||||||
free(fs, M_UFSMNT);
|
free(fs, M_UFSMNT);
|
||||||
}
|
}
|
||||||
if (cp != NULL) {
|
if (cp != NULL)
|
||||||
g_topology_lock();
|
g_vfs_close_unlocked(cp);
|
||||||
g_vfs_close(cp);
|
|
||||||
g_topology_unlock();
|
|
||||||
}
|
|
||||||
if (ump != NULL) {
|
if (ump != NULL) {
|
||||||
mtx_destroy(UFS_MTX(ump));
|
mtx_destroy(UFS_MTX(ump));
|
||||||
if (mp->mnt_gjprovider != NULL) {
|
if (mp->mnt_gjprovider != NULL) {
|
||||||
|
|||||||
Reference in new issue
Block a user