Page MenuHomeFreeBSD

D17757.id49777.diff
No OneTemporary

D17757.id49777.diff

Index: fs/nfsclient/nfs_clvnops.c
===================================================================
--- fs/nfsclient/nfs_clvnops.c
+++ fs/nfsclient/nfs_clvnops.c
@@ -3008,14 +3008,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);
@@ -3094,9 +3099,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);
@@ -3119,7 +3121,8 @@
NFSVOPUNLOCK(vp, 0);
}
}
- }
+ } else
+ NFSVOPUNLOCK(vp, 0);
return (error);
}

File Metadata

Mime Type
text/plain
Expires
Fri, Aug 28, 10:16 PM (9 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37485775
Default Alt Text
D17757.id49777.diff (1 KB)

Event Timeline