summaryrefslogtreecommitdiffstats
path: root/sys/fs
diff options
context:
space:
mode:
authormarkj <markj@FreeBSD.org>2015-07-05 22:37:33 +0000
committermarkj <markj@FreeBSD.org>2015-07-05 22:37:33 +0000
commitd19ba3f89dbe1aa527570d4bbbcc6bf7bacd7db2 (patch)
tree2b584c1ebc21d09c5c4b2fe8539dd7d22e9cbd7c /sys/fs
parentc78ab1ef947f631582f0b1abd43d3568122a79e0 (diff)
downloadFreeBSD-src-d19ba3f89dbe1aa527570d4bbbcc6bf7bacd7db2.zip
FreeBSD-src-d19ba3f89dbe1aa527570d4bbbcc6bf7bacd7db2.tar.gz
Check suspendability on the mountpoint returned by VOP_GETWRITEMOUNT.
This obviates the need for a MNTK_SUSPENDABLE flag, since passthrough filesystems like nullfs and unionfs no longer need to inherit this information from their lower layer(s). This change also restores the pre-r273336 behaviour of using the presence of a susp_clean VFS method to request suspension support. Reviewed by: kib, mjg Differential Revision: https://reviews.freebsd.org/D2937
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/nullfs/null_vfsops.c2
-rw-r--r--sys/fs/tmpfs/tmpfs_vfsops.c12
-rw-r--r--sys/fs/unionfs/union_vfsops.c3
3 files changed, 12 insertions, 5 deletions
diff --git a/sys/fs/nullfs/null_vfsops.c b/sys/fs/nullfs/null_vfsops.c
index 618090b..64e1e29 100644
--- a/sys/fs/nullfs/null_vfsops.c
+++ b/sys/fs/nullfs/null_vfsops.c
@@ -199,7 +199,7 @@ nullfs_mount(struct mount *mp)
}
mp->mnt_kern_flag |= MNTK_LOOKUP_EXCL_DOTDOT;
mp->mnt_kern_flag |= lowerrootvp->v_mount->mnt_kern_flag &
- (MNTK_SUSPENDABLE | MNTK_USES_BCACHE);
+ MNTK_USES_BCACHE;
MNT_IUNLOCK(mp);
mp->mnt_data = xmp;
vfs_getnewfsid(mp);
diff --git a/sys/fs/tmpfs/tmpfs_vfsops.c b/sys/fs/tmpfs/tmpfs_vfsops.c
index 2942e5a..f1ba960 100644
--- a/sys/fs/tmpfs/tmpfs_vfsops.c
+++ b/sys/fs/tmpfs/tmpfs_vfsops.c
@@ -75,6 +75,7 @@ static int tmpfs_root(struct mount *, int flags, struct vnode **);
static int tmpfs_fhtovp(struct mount *, struct fid *, int,
struct vnode **);
static int tmpfs_statfs(struct mount *, struct statfs *);
+static void tmpfs_susp_clean(struct mount *);
static const char *tmpfs_opts[] = {
"from", "size", "maxfilesize", "inodes", "uid", "gid", "mode", "export",
@@ -256,7 +257,7 @@ tmpfs_mount(struct mount *mp)
MNT_ILOCK(mp);
mp->mnt_flag |= MNT_LOCAL;
- mp->mnt_kern_flag |= MNTK_LOOKUP_SHARED | MNTK_SUSPENDABLE;
+ mp->mnt_kern_flag |= MNTK_LOOKUP_SHARED;
MNT_IUNLOCK(mp);
mp->mnt_data = tmp;
@@ -463,6 +464,14 @@ tmpfs_sync(struct mount *mp, int waitfor)
}
/*
+ * The presence of a susp_clean method tells the VFS to track writes.
+ */
+static void
+tmpfs_susp_clean(struct mount *mp __unused)
+{
+}
+
+/*
* tmpfs vfs operations.
*/
@@ -473,5 +482,6 @@ 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);
diff --git a/sys/fs/unionfs/union_vfsops.c b/sys/fs/unionfs/union_vfsops.c
index f65ee8c..f4b83bb 100644
--- a/sys/fs/unionfs/union_vfsops.c
+++ b/sys/fs/unionfs/union_vfsops.c
@@ -294,9 +294,6 @@ 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;
-
- if ((ump->um_uppervp->v_mount->mnt_kern_flag & MNTK_SUSPENDABLE) != 0)
- mp->mnt_kern_flag |= MNTK_SUSPENDABLE;
MNT_IUNLOCK(mp);
/*
OpenPOWER on IntegriCloud