Changeset View
Changeset View
Standalone View
Standalone View
head/sys/kern/vfs_vnops.c
Show First 20 Lines • Show All 258 Lines • ▼ Show 20 Lines | #endif | ||||
else | else | ||||
vput(ndp->ni_dvp); | vput(ndp->ni_dvp); | ||||
ndp->ni_dvp = NULL; | ndp->ni_dvp = NULL; | ||||
vp = ndp->ni_vp; | vp = ndp->ni_vp; | ||||
if (fmode & O_EXCL) { | if (fmode & O_EXCL) { | ||||
error = EEXIST; | error = EEXIST; | ||||
goto bad; | goto bad; | ||||
} | } | ||||
if (vp->v_type == VDIR) { | |||||
error = EISDIR; | |||||
goto bad; | |||||
} | |||||
fmode &= ~O_CREAT; | fmode &= ~O_CREAT; | ||||
} | } | ||||
} else { | } else { | ||||
ndp->ni_cnd.cn_nameiop = LOOKUP; | ndp->ni_cnd.cn_nameiop = LOOKUP; | ||||
ndp->ni_cnd.cn_flags = ISOPEN | | ndp->ni_cnd.cn_flags = ISOPEN | | ||||
((fmode & O_NOFOLLOW) ? NOFOLLOW : FOLLOW) | LOCKLEAF; | ((fmode & O_NOFOLLOW) ? NOFOLLOW : FOLLOW) | LOCKLEAF; | ||||
if (!(fmode & FWRITE)) | if (!(fmode & FWRITE)) | ||||
ndp->ni_cnd.cn_flags |= LOCKSHARED; | ndp->ni_cnd.cn_flags |= LOCKSHARED; | ||||
▲ Show 20 Lines • Show All 2,854 Lines • Show Last 20 Lines |