EACCES or EAGAIN
Operation is prohibited by locks held by other processes.
EAGAIN The operation is prohibited because the file has been
memory-mapped by another process.
EBADF fd is not an open file descriptor
EBADF cmd is F_SETLK or F_SETLKW and the file descriptor open
mode doesn't match with the type of lock requested.
EBUSY cmd is F_SETPIPE_SZ and the new pipe capacity specified in
arg is smaller than the amount of buffer space currently
used to store data in the pipe.
EBUSY cmd is F_ADD_SEALS, arg includes F_SEAL_WRITE, and there
exists a writable, shared mapping on the file referred to
by fd.
EDEADLK
It was detected that the specified F_SETLKW command would
cause a deadlock.
EFAULT lock is outside your accessible address space.
EINTR cmd is F_SETLKW or F_OFD_SETLKW and the operation was
interrupted by a signal; see signal(7).
EINTR cmd is F_GETLK, F_SETLK, F_OFD_GETLK, or F_OFD_SETLK, and
the operation was interrupted by a signal before the lock
was checked or acquired. Most likely when locking a
remote file (e.g., locking over NFS), but can sometimes
happen locally.
EINVAL The value specified in cmd is not recognized by this
kernel.
EINVAL cmd is F_ADD_SEALS and arg includes an unrecognized
sealing bit.
EINVAL cmd is F_ADD_SEALS or F_GET_SEALS and the filesystem
containing the inode referred to by fd does not support
sealing.
EINVAL cmd is F_DUPFD and arg is negative or is greater than the
maximum allowable value (see the discussion of
RLIMIT_NOFILE in getrlimit(2)).
EINVAL cmd is F_SETSIG and arg is not an allowable signal number.
EINVAL cmd is F_OFD_SETLK, F_OFD_SETLKW, or F_OFD_GETLK, and
l_pid was not specified as zero.
EMFILE cmd is F_DUPFD and the per-process limit on the number of
open file descriptors has been reached.
ENOLCK Too many segment locks open, lock table is full, or a
remote locking protocol failed (e.g., locking over NFS).
ENOTDIR
F_NOTIFY was specified in cmd, but fd does not refer to a
directory.
EPERM cmd is F_SETPIPE_SZ and the soft or hard user pipe limit
has been reached; see pipe(7).
EPERM Attempted to clear the O_APPEND flag on a file that has
the append-only attribute set.
EPERM cmd was F_ADD_SEALS, but fd was not open for writing or
the current set of seals on the file already includes
F_SEAL_SEAL.