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

Reply via email to