Page MenuHomeFreeBSD

D2937.id6531.diff
No OneTemporary

D2937.id6531.diff

Index: sys/fs/nullfs/null_vfsops.c
===================================================================
--- sys/fs/nullfs/null_vfsops.c
+++ sys/fs/nullfs/null_vfsops.c
@@ -198,8 +198,8 @@
MNTK_EXTENDED_SHARED);
}
mp->mnt_kern_flag |= MNTK_LOOKUP_EXCL_DOTDOT;
- mp->mnt_kern_flag |= lowerrootvp->v_mount->mnt_kern_flag &
- (MNTK_SUSPENDABLE | MNTK_USES_BCACHE);
+ mp->mnt_kern_flag |=
+ lowerrootvp->v_mount->mnt_kern_flag & MNTK_USES_BCACHE;
MNT_IUNLOCK(mp);
mp->mnt_data = xmp;
vfs_getnewfsid(mp);
Index: sys/fs/tmpfs/tmpfs_vfsops.c
===================================================================
--- sys/fs/tmpfs/tmpfs_vfsops.c
+++ sys/fs/tmpfs/tmpfs_vfsops.c
@@ -75,6 +75,7 @@
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 @@
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 @@
}
/*
+ * 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 @@
.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);
Index: sys/fs/unionfs/union_vfsops.c
===================================================================
--- sys/fs/unionfs/union_vfsops.c
+++ sys/fs/unionfs/union_vfsops.c
@@ -294,9 +294,6 @@
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);
/*
Index: sys/kern/vfs_vnops.c
===================================================================
--- sys/kern/vfs_vnops.c
+++ sys/kern/vfs_vnops.c
@@ -1592,19 +1592,7 @@
vn_suspendable_mp(struct mount *mp)
{
- return ((mp->mnt_kern_flag & MNTK_SUSPENDABLE) != 0);
-}
-
-static bool
-vn_suspendable(struct vnode *vp, struct mount **mpp)
-{
-
- if (vp != NULL)
- *mpp = vp->v_mount;
- if (*mpp == NULL)
- return (false);
-
- return (vn_suspendable_mp(*mpp));
+ return (mp->mnt_op->vfs_susp_clean != NULL);
}
/*
@@ -1657,11 +1645,6 @@
KASSERT((flags & V_MNTREF) == 0 || (*mpp != NULL && vp == NULL),
("V_MNTREF requires mp"));
- if (!vn_suspendable(vp, mpp)) {
- if ((flags & V_MNTREF) != 0)
- vfs_rel(*mpp);
- return (0);
- }
error = 0;
/*
@@ -1679,6 +1662,12 @@
if ((mp = *mpp) == NULL)
return (0);
+ if (!vn_suspendable_mp(mp)) {
+ if (vp != NULL || (flags & V_MNTREF) != 0)
+ vfs_rel(mp);
+ return (0);
+ }
+
/*
* VOP_GETWRITEMOUNT() returns with the mp refcount held through
* a vfs_ref().
@@ -1708,11 +1697,6 @@
KASSERT((flags & V_MNTREF) == 0 || (*mpp != NULL && vp == NULL),
("V_MNTREF requires mp"));
- if (!vn_suspendable(vp, mpp)) {
- if ((flags & V_MNTREF) != 0)
- vfs_rel(*mpp);
- return (0);
- }
retry:
if (vp != NULL) {
@@ -1730,6 +1714,12 @@
if ((mp = *mpp) == NULL)
return (0);
+ if (!vn_suspendable_mp(mp)) {
+ if (vp != NULL || (flags & V_MNTREF) != 0)
+ vfs_rel(mp);
+ return (0);
+ }
+
/*
* VOP_GETWRITEMOUNT() returns with the mp refcount held through
* a vfs_ref().
Index: sys/sys/mount.h
===================================================================
--- sys/sys/mount.h
+++ sys/sys/mount.h
@@ -362,7 +362,7 @@
#define MNTK_SUSPEND 0x08000000 /* request write suspension */
#define MNTK_SUSPEND2 0x04000000 /* block secondary writes */
#define MNTK_SUSPENDED 0x10000000 /* write operations are suspended */
-#define MNTK_SUSPENDABLE 0x20000000 /* writes can be suspended */
+#define MNTK_UNUSED1 0x20000000
#define MNTK_LOOKUP_SHARED 0x40000000 /* FS supports shared lock lookups */
#define MNTK_NOKNOTE 0x80000000 /* Don't send KNOTEs from VOP hooks */
Index: sys/ufs/ffs/ffs_vfsops.c
===================================================================
--- sys/ufs/ffs/ffs_vfsops.c
+++ sys/ufs/ffs/ffs_vfsops.c
@@ -1055,8 +1055,7 @@
*/
MNT_ILOCK(mp);
mp->mnt_kern_flag |= MNTK_LOOKUP_SHARED | MNTK_EXTENDED_SHARED |
- MNTK_NO_IOPF | MNTK_UNMAPPED_BUFS | MNTK_SUSPENDABLE |
- MNTK_USES_BCACHE;
+ MNTK_NO_IOPF | MNTK_UNMAPPED_BUFS | MNTK_USES_BCACHE;
MNT_IUNLOCK(mp);
#ifdef UFS_EXTATTR
#ifdef UFS_EXTATTR_AUTOSTART

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 29, 4:07 AM (18 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14373144
Default Alt Text
D2937.id6531.diff (4 KB)

Event Timeline