Page MenuHomeFreeBSD

D17757.diff
No OneTemporary

D17757.diff

Index: head/sys/fs/nfsclient/nfs_clvnops.c
===================================================================
--- head/sys/fs/nfsclient/nfs_clvnops.c
+++ head/sys/fs/nfsclient/nfs_clvnops.c
@@ -3033,14 +3033,19 @@
int ret, error = EOPNOTSUPP;
u_quad_t size;
+ ret = NFSVOPLOCK(vp, LK_SHARED);
+ if (ret != 0)
+ return (EBADF);
if (NFS_ISV4(vp) && (ap->a_flags & (F_POSIX | F_FLOCK)) != 0) {
- if (vp->v_type != VREG)
+ if (vp->v_type != VREG) {
+ NFSVOPUNLOCK(vp, 0);
return (EINVAL);
+ }
if ((ap->a_flags & F_POSIX) != 0)
cred = p->p_ucred;
else
cred = td->td_ucred;
- NFSVOPLOCK(vp, LK_EXCLUSIVE | LK_RETRY);
+ NFSVOPLOCK(vp, LK_UPGRADE | LK_RETRY);
if (vp->v_iflag & VI_DOOMED) {
NFSVOPUNLOCK(vp, 0);
return (EBADF);
@@ -3119,9 +3124,6 @@
NFSVOPUNLOCK(vp, 0);
return (0);
} else if (!NFS_ISV4(vp)) {
- error = NFSVOPLOCK(vp, LK_SHARED);
- if (error)
- return (error);
if ((VFSTONFS(vp->v_mount)->nm_flag & NFSMNT_NOLOCKD) != 0) {
size = VTONFS(vp)->n_size;
NFSVOPUNLOCK(vp, 0);
@@ -3144,7 +3146,8 @@
NFSVOPUNLOCK(vp, 0);
}
}
- }
+ } else
+ NFSVOPUNLOCK(vp, 0);
return (error);
}

File Metadata

Mime Type
text/plain
Expires
Mon, Dec 23, 5:56 PM (2 h, 16 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15573151
Default Alt Text
D17757.diff (1 KB)

Event Timeline