diff options
author | kib <kib@FreeBSD.org> | 2013-05-02 18:44:31 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2013-05-02 18:44:31 +0000 |
commit | 5830ee0d3ff65246d6a80a17030fb0131023a3ce (patch) | |
tree | 9d3aeb6624a9893d4aa6ff0ec6a26d367985da7a /sys/fs/tmpfs/tmpfs.h | |
parent | 3a177062d539e9291599fc04488ad378853d27ec (diff) | |
download | FreeBSD-src-5830ee0d3ff65246d6a80a17030fb0131023a3ce.zip FreeBSD-src-5830ee0d3ff65246d6a80a17030fb0131023a3ce.tar.gz |
For the new regular tmpfs vnode, v_object is initialized before
insmntque() is called. The standard insmntque destructor resets the
vop vector to deadfs one, and calls vgone() on the vnode. As result,
v_object is kept unchanged, which triggers an assertion in the reclaim
code, on instmntque() failure. Also, in this case, OBJ_TMPFS flag on
the backed vm object is not cleared.
Provide the tmpfs insmntque() destructor which properly clears
OBJ_TMPFS flag and resets v_object.
Reported and tested by: pho
Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'sys/fs/tmpfs/tmpfs.h')
-rw-r--r-- | sys/fs/tmpfs/tmpfs.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/fs/tmpfs/tmpfs.h b/sys/fs/tmpfs/tmpfs.h index 8f03f10..5a27ccf 100644 --- a/sys/fs/tmpfs/tmpfs.h +++ b/sys/fs/tmpfs/tmpfs.h @@ -402,6 +402,7 @@ int tmpfs_alloc_dirent(struct tmpfs_mount *, struct tmpfs_node *, const char *, u_int, struct tmpfs_dirent **); void tmpfs_free_dirent(struct tmpfs_mount *, struct tmpfs_dirent *); void tmpfs_dirent_init(struct tmpfs_dirent *, const char *, u_int); +void tmpfs_destroy_vobject(struct vnode *vp, vm_object_t obj); int tmpfs_alloc_vp(struct mount *, struct tmpfs_node *, int, struct vnode **); void tmpfs_free_vp(struct vnode *); |