---
name: "aio_mlock"
section: "2"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/aio_mlock"
---

# aio\_mlock(2)

asynchronous mlock(2) operation

## NAME

**aio\_mlock** – asynchronous [mlock(2)](/mlock/2.md) operation

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<aio.h\>**

*int*\

**aio\_mlock**(*struct aiocb \*iocb*);

## DESCRIPTION

The **aio\_mlock**() system call allows the calling process to lock into memory the physical pages associated with the virtual address range starting at *iocb-\>aio\_buf* for *iocb-\>aio\_nbytes* bytes. The call returns immediately after the locking request has been enqueued; the operation may or may not have completed at the time the call returns.

The *iocb* pointer may be subsequently used as an argument to **aio\_return**() and **aio\_error**() in order to determine return or error status for the enqueued operation while it is in progress.

If the request could not be enqueued (generally due to [aio(4)](/aio/4.md) limits), then the call returns without having enqueued the request.

The *iocb-\>aio\_sigevent* structure can be used to request notification of the operation's completion as described in [aio(4)](/aio/4.md).

## RESTRICTIONS

The Asynchronous I/O Control Block structure pointed to by *iocb* and the buffer that the *iocb-\>aio\_buf* member of that structure references must remain valid until the operation has completed.

The asynchronous I/O control buffer *iocb* should be zeroed before the **aio\_mlock**() call to avoid passing bogus context information to the kernel.

Modifications of the Asynchronous I/O Control Block structure or the memory mapping described by the virtual address range are not allowed while the request is queued.

## RETURN VALUES

The **aio\_mlock()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **aio\_mlock**() system call will fail if:

- \[EAGAIN\]

  The request was not queued because of system resource limitations.

- \[EINVAL\]

  The asynchronous notification method in *iocb-\>aio\_sigevent.sigev\_notify* is invalid or not supported.

If the request is successfully enqueued, but subsequently cancelled or an error occurs, the value returned by the **aio\_return**() system call is per the [mlock(2)](/mlock/2.md) system call, and the value returned by the **aio\_error**() system call is one of the error returns from the [mlock(2)](/mlock/2.md) system call, or ECANCELED if the request was explicitly cancelled via a call to **aio\_cancel**().

## SEE ALSO

[aio\_cancel(2)](/aio_cancel/2.md), [aio\_error(2)](/aio_error/2.md), [aio\_return(2)](/aio_return/2.md), [mlock(2)](/mlock/2.md), [sigevent(3)](/sigevent/3.md), [aio(4)](/aio/4.md)

## PORTABILITY

The **aio\_mlock**() system call is a FreeBSD extension, and should not be used in portable code.

## HISTORY

The **aio\_mlock**() system call first appeared in FreeBSD 10.0.

## AUTHORS

The system call was introduced by Gleb Smirnoff ⟨*glebius@FreeBSD.org*⟩.
