diff options
author | phk <phk@FreeBSD.org> | 2004-06-19 11:41:45 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-06-19 11:41:45 +0000 |
commit | 3237babd8b5786ce6ea9b516c89f43c32f8c35b2 (patch) | |
tree | d1cefce644787efc13929b47bf943272e617b1c2 | |
parent | 1ce305fbfd151957d1877c533da0a0578ab04938 (diff) | |
download | FreeBSD-src-3237babd8b5786ce6ea9b516c89f43c32f8c35b2.zip FreeBSD-src-3237babd8b5786ce6ea9b516c89f43c32f8c35b2.tar.gz |
Only initialize f_data and f_ops if nobody else did so already.
-rw-r--r-- | sys/kern/vfs_extattr.c | 6 | ||||
-rw-r--r-- | sys/kern/vfs_syscalls.c | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index 50ab8ed..10ff13f 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -1033,9 +1033,11 @@ kern_open(struct thread *td, char *path, enum uio_seg pathseg, int flags, return (0); } fp->f_vnode = vp; - fp->f_data = vp; + if (fp->f_data == NULL) + fp->f_data = vp; fp->f_flag = flags & FMASK; - fp->f_ops = &vnops; + if (fp->f_ops == &badfileops) + fp->f_ops = &vnops; fp->f_seqcount = 1; fp->f_type = (vp->v_type == VFIFO ? DTYPE_FIFO : DTYPE_VNODE); FILEDESC_UNLOCK(fdp); diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 50ab8ed..10ff13f 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -1033,9 +1033,11 @@ kern_open(struct thread *td, char *path, enum uio_seg pathseg, int flags, return (0); } fp->f_vnode = vp; - fp->f_data = vp; + if (fp->f_data == NULL) + fp->f_data = vp; fp->f_flag = flags & FMASK; - fp->f_ops = &vnops; + if (fp->f_ops == &badfileops) + fp->f_ops = &vnops; fp->f_seqcount = 1; fp->f_type = (vp->v_type == VFIFO ? DTYPE_FIFO : DTYPE_VNODE); FILEDESC_UNLOCK(fdp); |