Provided by: manpages-dev_6.16-1_all bug

NAME

       F_GETLEASE, F_SETLEASE - leases

LIBRARY

       Standard C library (libc, -lc)

SYNOPSIS

       #define _GNU_SOURCE
       #include <fcntl.h>

       int fcntl(int fd, F_SETLEASE, int arg);
       int fcntl(int fd, F_GETLEASE);

DESCRIPTION

   Leases
       F_SETLEASE  and F_GETLEASE are used to establish a new lease, and retrieve the current lease, on the open
       file description referred to by the file descriptor fd.  A file lease provides a  mechanism  whereby  the
       process holding the lease (the "lease holder") is notified (via delivery of a signal) when a process (the
       "lease breaker") tries to open(2) or truncate(2) the file referred to by that file descriptor.

       F_SETLEASE
              Set  or remove a file lease according to which of the following values is specified in the integer
              arg:

              F_RDLCK
                     Take out a read lease.  This will cause the calling process to be notified when the file is
                     opened for writing or is truncated.  A read lease can be placed only on a  file  descriptor
                     that is opened read-only.

              F_WRLCK
                     Take  out a write lease.  This will cause the caller to be notified when the file is opened
                     for reading or writing or is truncated.  A write lease may be placed  on  a  file  only  if
                     there are no other open file descriptors for the file.

              F_UNLCK
                     Remove our lease from the file.

       Leases  are  associated  with  an  open  file  description (see open(2)).  This means that duplicate file
       descriptors (created by, for example, fork(2) or dup(2)) refer to the same lease, and this lease  may  be
       modified  or  released  using  any of these descriptors.  Furthermore, the lease is released by either an
       explicit F_UNLCK operation on any of these duplicate file descriptors, or when all such file  descriptors
       have been closed.

       Leases  may  be  taken out only on regular files.  An unprivileged process may take out a lease only on a
       file whose UID (owner) matches the  filesystem  UID  of  the  process.   A  process  with  the  CAP_LEASE
       capability may take out leases on arbitrary files.

       F_GETLEASE
              Indicates  what  type  of  lease  is  associated  with  the file descriptor fd by returning either
              F_RDLCK, F_WRLCK, or F_UNLCK, indicating, respectively, a read lease , a write lease, or no lease.
              arg is ignored.

       When a process (the "lease breaker") performs an open(2) or  truncate(2)  that  conflicts  with  a  lease
       established  via  F_SETLEASE,  the system call is blocked by the kernel and the kernel notifies the lease
       holder by sending it a signal (SIGIO by default).  The lease holder should respond  to  receipt  of  this
       signal  by  doing  whatever  cleanup  is  required  in preparation for the file to be accessed by another
       process (e.g., flushing cached buffers) and then either remove  or  downgrade  its  lease.   A  lease  is
       removed  by  performing an F_SETLEASE operation specifying arg as F_UNLCK.  If the lease holder currently
       holds a write lease on the file, and the lease breaker is opening  the  file  for  reading,  then  it  is
       sufficient  for  the  lease holder to downgrade the lease to a read lease.  This is done by performing an
       F_SETLEASE operation specifying arg as F_RDLCK.

       If the lease holder fails to downgrade or remove the lease within the  number  of  seconds  specified  in
       /proc/sys/fs/lease-break-time, then the kernel forcibly removes or downgrades the lease holder's lease.

       Once  a  lease  break  has  been  initiated,  F_GETLEASE returns the target lease type (either F_RDLCK or
       F_UNLCK, depending on what would be compatible with the lease breaker) until the lease holder voluntarily
       downgrades or removes the lease or the kernel forcibly does so after the lease break timer expires.

       Once the lease has been voluntarily or forcibly removed or downgraded, and assuming the lease breaker has
       not unblocked its system call, the kernel permits the lease breaker's system call to proceed.

       If the lease breaker's blocked open(2) or truncate(2) is interrupted by a signal handler, then the system
       call fails with the error EINTR, but the other steps still  occur  as  described  above.   If  the  lease
       breaker  is  killed by a signal while blocked in open(2) or truncate(2), then the other steps still occur
       as described above.  If the lease breaker specifies the O_NONBLOCK flag when calling  open(2),  then  the
       call immediately fails with the error EWOULDBLOCK, but the other steps still occur as described above.

       The  default  signal used to notify the lease holder is SIGIO, but this can be changed using the F_SETSIG
       operation to fcntl().  If a F_SETSIG operation is performed (even one specifying SIGIO), and  the  signal
       handler  is  established  using  SA_SIGINFO,  then  the handler will receive a siginfo_t structure as its
       second argument, and the si_fd field of this argument will hold the file descriptor of  the  leased  file
       that  has  been accessed by another process.  (This is useful if the caller holds leases against multiple
       files.)

RETURN VALUE

       F_GETLEASE
              Type of lease held on file descriptor.

       F_SETLEASE
              Zero.

       On error, -1 is returned, and errno is set to indicate the error.

ERRORS

       See fcntl(2).

STANDARDS

       Linux.

HISTORY

       Linux 2.4.

SEE ALSO

       fcntl(2)

Linux man-pages 6.16                               2025-07-20                                 F_GETLEASE(2const)