diff options
author | tegge <tegge@FreeBSD.org> | 2007-03-13 01:50:27 +0000 |
---|---|---|
committer | tegge <tegge@FreeBSD.org> | 2007-03-13 01:50:27 +0000 |
commit | 214bc5723c38739a6060170f2c421e59d87b2c82 (patch) | |
tree | 6dca3f2c99e6dcb6402e1486118e56eb8d5e871b /sys/sys/vnode.h | |
parent | 76cbc46fe707603a2b4dde9cc8398128868b56ee (diff) | |
download | FreeBSD-src-214bc5723c38739a6060170f2c421e59d87b2c82.zip FreeBSD-src-214bc5723c38739a6060170f2c421e59d87b2c82.tar.gz |
Make insmntque() externally visibile and allow it to fail (e.g. during
late stages of unmount). On failure, the vnode is recycled.
Add insmntque1(), to allow for file system specific cleanup when
recycling vnode on failure.
Change getnewvnode() to no longer call insmntque(). Previously,
embryonic vnodes were put onto the list of vnode belonging to a file
system, which is unsafe for a file system marked MPSAFE.
Change vfs_hash_insert() to no longer lock the vnode. The caller now
has that responsibility.
Change most file systems to lock the vnode and call insmntque() or
insmntque1() after a new vnode has been sufficiently setup. Handle
failed insmntque*() calls by propagating errors to callers, possibly
after some file system specific cleanup.
Approved by: re (kensmith)
Reviewed by: kib
In collaboration with: kib
Diffstat (limited to 'sys/sys/vnode.h')
-rw-r--r-- | sys/sys/vnode.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 15bfe6b..da47a50 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -572,6 +572,9 @@ void cvtstat(struct stat *st, struct ostat *ost); void cvtnstat(struct stat *sb, struct nstat *nsb); int getnewvnode(const char *tag, struct mount *mp, struct vop_vector *vops, struct vnode **vpp); +int insmntque1(struct vnode *vp, struct mount *mp, + void (*dtr)(struct vnode *, void *), void *dtr_arg); +int insmntque(struct vnode *vp, struct mount *mp); u_quad_t init_va_filerev(void); int lease_check(struct vop_lease_args *ap); int speedup_syncer(void); |