Date: Mon, 20 Oct 2014 18:00:51 +0000 (UTC) From: Mateusz Guzik <mjg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r273336 - in head/sys: fs/nullfs fs/tmpfs fs/unionfs kern sys ufs/ffs Message-ID: <201410201800.s9KI0pKK010940@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mjg Date: Mon Oct 20 18:00:50 2014 New Revision: 273336 URL: https://svnweb.freebsd.org/changeset/base/273336 Log: Provide vfs suspension support only for filesystems which need it, take two. nullfs and unionfs need to request suspension if underlying filesystem(s) use it. Utilize mnt_kern_flag for this purpose. This is a fixup for 273271. No strong objections from: kib Pointy hat to: mjg MFC after: 2 weeks Modified: head/sys/fs/nullfs/null_vfsops.c head/sys/fs/tmpfs/tmpfs_vfsops.c head/sys/fs/unionfs/union_vfsops.c head/sys/kern/vfs_vnops.c head/sys/sys/mount.h head/sys/ufs/ffs/ffs_vfsops.c Modified: head/sys/fs/nullfs/null_vfsops.c ============================================================================== --- head/sys/fs/nullfs/null_vfsops.c Mon Oct 20 17:53:49 2014 (r273335) +++ head/sys/fs/nullfs/null_vfsops.c Mon Oct 20 18:00:50 2014 (r273336) @@ -198,6 +198,8 @@ nullfs_mount(struct mount *mp) MNTK_EXTENDED_SHARED); } mp->mnt_kern_flag |= MNTK_LOOKUP_EXCL_DOTDOT; + mp->mnt_kern_flag |= lowerrootvp->v_mount->mnt_kern_flag & + MNTK_SUSPENDABLE; MNT_IUNLOCK(mp); mp->mnt_data = xmp; vfs_getnewfsid(mp); Modified: head/sys/fs/tmpfs/tmpfs_vfsops.c ============================================================================== --- head/sys/fs/tmpfs/tmpfs_vfsops.c Mon Oct 20 17:53:49 2014 (r273335) +++ head/sys/fs/tmpfs/tmpfs_vfsops.c Mon Oct 20 18:00:50 2014 (r273336) @@ -255,6 +255,7 @@ tmpfs_mount(struct mount *mp) MNT_ILOCK(mp); mp->mnt_flag |= MNT_LOCAL; + mp->mnt_kern_flag |= MNTK_SUSPENDABLE; MNT_IUNLOCK(mp); mp->mnt_data = tmp; @@ -427,14 +428,6 @@ tmpfs_sync(struct mount *mp, int waitfor } /* - * A stub created so that vfs does vn_start_write for this filesystem - */ -static void -tmpfs_susp_clean(struct mount *mp) -{ -} - -/* * tmpfs vfs operations. */ @@ -445,6 +438,5 @@ struct vfsops tmpfs_vfsops = { .vfs_statfs = tmpfs_statfs, .vfs_fhtovp = tmpfs_fhtovp, .vfs_sync = tmpfs_sync, - .vfs_susp_clean = tmpfs_susp_clean, }; VFS_SET(tmpfs_vfsops, tmpfs, VFCF_JAIL); Modified: head/sys/fs/unionfs/union_vfsops.c ============================================================================== --- head/sys/fs/unionfs/union_vfsops.c Mon Oct 20 17:53:49 2014 (r273335) +++ head/sys/fs/unionfs/union_vfsops.c Mon Oct 20 18:00:50 2014 (r273336) @@ -297,6 +297,13 @@ unionfs_domount(struct mount *mp) if ((ump->um_lowervp->v_mount->mnt_flag & MNT_LOCAL) && (ump->um_uppervp->v_mount->mnt_flag & MNT_LOCAL)) mp->mnt_flag |= MNT_LOCAL; + + /* + * Check mnt_kern_flag + */ + if ((ump->um_lowervp->v_mount->mnt_flag & MNTK_SUSPENDABLE) || + (ump->um_uppervp->v_mount->mnt_flag & MNTK_SUSPENDABLE)) + mp->mnt_kern_flag |= MNTK_SUSPENDABLE; MNT_IUNLOCK(mp); /* Modified: head/sys/kern/vfs_vnops.c ============================================================================== --- head/sys/kern/vfs_vnops.c Mon Oct 20 17:53:49 2014 (r273335) +++ head/sys/kern/vfs_vnops.c Mon Oct 20 18:00:50 2014 (r273336) @@ -1576,7 +1576,7 @@ static bool vn_suspendable_mp(struct mount *mp) { - return (mp->mnt_op->vfs_susp_clean != NULL); + return ((mp->mnt_kern_flag & MNTK_SUSPENDABLE) != 0); } static bool Modified: head/sys/sys/mount.h ============================================================================== --- head/sys/sys/mount.h Mon Oct 20 17:53:49 2014 (r273335) +++ head/sys/sys/mount.h Mon Oct 20 18:00:50 2014 (r273336) @@ -361,7 +361,7 @@ void __mnt_vnode_markerfree_act #define MNTK_SUSPEND 0x08000000 /* request write suspension */ #define MNTK_SUSPEND2 0x04000000 /* block secondary writes */ #define MNTK_SUSPENDED 0x10000000 /* write operations are suspended */ -#define MNTK_UNUSED25 0x20000000 /* --available-- */ +#define MNTK_SUSPENDABLE 0x20000000 /* writes can be suspended */ #define MNTK_LOOKUP_SHARED 0x40000000 /* FS supports shared lock lookups */ #define MNTK_NOKNOTE 0x80000000 /* Don't send KNOTEs from VOP hooks */ @@ -754,10 +754,11 @@ vfs_statfs_t __vfs_statfs; _rc; }) #define VFS_SUSP_CLEAN(MP) do { \ - MPASS(*(MP)->mnt_op->vfs_susp_clean != NULL); \ - VFS_PROLOGUE(MP); \ - (*(MP)->mnt_op->vfs_susp_clean)(MP); \ - VFS_EPILOGUE(MP); \ + if (*(MP)->mnt_op->vfs_susp_clean != NULL) { \ + VFS_PROLOGUE(MP); \ + (*(MP)->mnt_op->vfs_susp_clean)(MP); \ + VFS_EPILOGUE(MP); \ + } \ } while (0) #define VFS_RECLAIM_LOWERVP(MP, VP) do { \ Modified: head/sys/ufs/ffs/ffs_vfsops.c ============================================================================== --- head/sys/ufs/ffs/ffs_vfsops.c Mon Oct 20 17:53:49 2014 (r273335) +++ head/sys/ufs/ffs/ffs_vfsops.c Mon Oct 20 18:00:50 2014 (r273336) @@ -1055,7 +1055,7 @@ ffs_mountfs(devvp, mp, td) */ MNT_ILOCK(mp); mp->mnt_kern_flag |= MNTK_LOOKUP_SHARED | MNTK_EXTENDED_SHARED | - MNTK_NO_IOPF | MNTK_UNMAPPED_BUFS; + MNTK_NO_IOPF | MNTK_UNMAPPED_BUFS | MNTK_SUSPENDABLE; MNT_IUNLOCK(mp); #ifdef UFS_EXTATTR #ifdef UFS_EXTATTR_AUTOSTART
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410201800.s9KI0pKK010940>