On Tue, May 03, 2016 at 12:20:41PM +0000, Emmanuel Dreyfus wrote: > Well, I need you to explain me what happens in sys_flock() then. > Is it a bug? > error = VOP_ADVLOCK(vp, fp, F_UNLCK, &lf, F_FLOCK); > > fp is struct file. Same thing happens in open_setfp() and closef()
sys_flock() is for BSD flock(2) advisory file locking. There is no mandatory BSD file locking. The Linux mandatory-locking.txt that you cited clearly states that it applies to fcntl(2)/lockf(2) locking. If you look into lf_advlock() you notice: if (lock->lf_flags & F_POSIX) { KASSERT(curproc == (struct proc *)ap->a_id); } lock->lf_id = ap->a_id; I.e. for POSIX/fcntl(2) locking it the owner must be curproc. Are you looking for sys_lockf? That doesn't exist because libc/gen/lockf.c is a thin wrapper around fcntl(2). --chris