mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
Fix the experimental NFSv4 server so that it performs local VOP_ADVLOCK()
unlock operations correctly. It was passing in F_SETLK instead of F_UNLCK as the operation for the unlock case. This only affected operation when local locking (vfs.newnfs.enable_locallocks=1) was enabled. MFC after: 1 week
This commit is contained in:
parent
aa2e033466
commit
c7aafc24c4
1 changed files with 7 additions and 3 deletions
|
|
@ -2825,7 +2825,7 @@ nfsvno_advlock(struct vnode *vp, int ftype, u_int64_t first,
|
|||
struct flock fl;
|
||||
u_int64_t tlen;
|
||||
|
||||
if (!nfsrv_dolocallocks)
|
||||
if (nfsrv_dolocallocks == 0)
|
||||
return (0);
|
||||
fl.l_whence = SEEK_SET;
|
||||
fl.l_type = ftype;
|
||||
|
|
@ -2850,8 +2850,12 @@ nfsvno_advlock(struct vnode *vp, int ftype, u_int64_t first,
|
|||
fl.l_sysid = (int)nfsv4_sysid;
|
||||
|
||||
NFSVOPUNLOCK(vp, 0, td);
|
||||
error = VOP_ADVLOCK(vp, (caddr_t)td->td_proc, F_SETLK, &fl,
|
||||
(F_POSIX | F_REMOTE));
|
||||
if (ftype == F_UNLCK)
|
||||
error = VOP_ADVLOCK(vp, (caddr_t)td->td_proc, F_UNLCK, &fl,
|
||||
(F_POSIX | F_REMOTE));
|
||||
else
|
||||
error = VOP_ADVLOCK(vp, (caddr_t)td->td_proc, F_SETLK, &fl,
|
||||
(F_POSIX | F_REMOTE));
|
||||
NFSVOPLOCK(vp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
return (error);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue