summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-06-19 11:41:45 +0000
committerphk <phk@FreeBSD.org>2004-06-19 11:41:45 +0000
commit3237babd8b5786ce6ea9b516c89f43c32f8c35b2 (patch)
treed1cefce644787efc13929b47bf943272e617b1c2
parent1ce305fbfd151957d1877c533da0a0578ab04938 (diff)
downloadFreeBSD-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.c6
-rw-r--r--sys/kern/vfs_syscalls.c6
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);
OpenPOWER on IntegriCloud