ibv_fork_init(3) — Linux manual page

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | NOTES | SEE ALSO | AUTHOR | COLOPHON

IBV_FORK_INIT(3)      Libibverbs Programmer’s Manual     IBV_FORK_INIT(3)

NAME         top

       ibv_fork_init - initialize libibverbs to support fork()

SYNOPSIS         top

              #include <infiniband/verbs.h>

              int ibv_fork_init(void);

DESCRIPTION         top

       ibv_fork_init() initializes libibverbs’s data structures to handle
       fork() function calls correctly and avoid data corruption, whether
       fork() is called explicitly or implicitly (such as in system()).

       It is not necessary to use this function if all parent process
       threads are always blocked until all child processes end or change
       address spaces via an exec() operation.

RETURN VALUE         top

       ibv_fork_init() returns 0 on success, or the value of errno on
       failure (which indicates the failure reason).  An error value of
       EINVAL indicates that there had been RDMA memory registration
       already and it is therefore not safe anymore to fork.

NOTES         top

       ibv_fork_init() works on Linux kernels supporting the
       MADV_DONTFORK flag for madvise() (2.6.17 and higher).

       Setting the environment variable RDMAV_FORK_SAFE or IBV_FORK_SAFE
       has the same effect as calling ibv_fork_init().

       Setting the environment variable RDMAV_HUGEPAGES_SAFE tells the
       library to check the underlying page size used by the kernel for
       memory regions.  This is required if an application uses huge
       pages either directly or indirectly via a library such as
       libhugetlbfs.

       Calling ibv_fork_init() will reduce performance due to an extra
       system call for every memory registration, and the additional
       memory allocated to track memory regions.  The precise performance
       impact depends on the workload and usually will not be
       significant.

       Setting RDMAV_HUGEPAGES_SAFE adds further overhead to all memory
       registrations.

SEE ALSO         top

       exec(3), fork(2), ibv_get_device_list(3), system(3), wait(2)

AUTHOR         top

       Dotan Barak ⟨[email protected]

COLOPHON         top

       This page is part of the rdma-core (RDMA Core Userspace Libraries
       and Daemons) project.  Information about the project can be found
       at ⟨https://github.com/linux-rdma/rdma-core⟩.  If you have a bug
       report for this manual page, send it to
       [email protected].  This page was obtained from the
       project's upstream Git repository
       ⟨https://github.com/linux-rdma/rdma-core.git⟩ on 2025-08-11.  (At
       that time, the date of the most recent commit that was found in
       the repository was 2025-08-04.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there is
       a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       [email protected]

libibverbs                      2006-10-31               IBV_FORK_INIT(3)

Pages that refer to this page: ibv_free_device_list(3)ibv_get_device_list(3)ibv_is_fork_initialized(3)