.\" Copyright (C) 1993 Rickard E. Faith <faith@cs.unc.edu>
.\" and Copyright (C) 1994 Andries E. Brouwer <aeb@cwi.nl>
.\" and Copyright (C) 2002, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" 2008-10-06, mtk: Created this as a new page by splitting
.\"     umount/umount2 material out of mount.2
.\"
.TH UMOUNT 2 2015-03-29 "Linux" "Linux Programmer's Manual"
.SH NAME
umount, umount2 \- unmount filesystem
.SH SYNOPSIS
.nf
.B "#include <sys/mount.h>"
.sp
.BI "int umount(const char *" target );
.sp
.BI "int umount2(const char *" target ", int " flags );
.fi
.SH DESCRIPTION
.BR umount ()
and
.BR umount2 ()
remove the attachment of the (topmost) filesystem mounted on
.IR target .
.\" Note: the kernel naming differs from the glibc naming
.\" umount2 is the glibc name for what the kernel now calls umount
.\" and umount is the glibc name for oldumount

Appropriate privilege (Linux: the
.B CAP_SYS_ADMIN
capability) is required to unmount filesystems.

Linux 2.1.116 added the
.BR umount2 ()
system call, which, like
.BR umount (),
unmounts a target, but allows additional
.I flags
controlling the behavior of the operation:
.TP
.BR MNT_FORCE " (since Linux 2.1.116)"
Force unmount even if busy.
This can cause data loss.
(Only for NFS mounts.)
.TP
.BR MNT_DETACH " (since Linux 2.4.11)"
Perform a lazy unmount: make the mount point unavailable for new
accesses, immediately disconnect the filesystem and all filesystems
mounted below it from each other and from the mount table, and
actually perform the unmount when the mount point ceases to be busy.
.TP
.BR MNT_EXPIRE " (since Linux 2.6.8)"
Mark the mount point as expired.
If a mount point is not currently in use, then an initial call to
.BR umount2 ()
with this flag fails with the error
.BR EAGAIN ,
but marks the mount point as expired.
The mount point remains expired as long as it isn't accessed
by any process.
A second
.BR umount2 ()
call specifying
.B MNT_EXPIRE
unmounts an expired mount point.
This flag cannot be specified with either
.B MNT_FORCE
or
.BR MNT_DETACH .
.TP
.BR UMOUNT_NOFOLLOW " (since Linux 2.6.34)"
.\" Later added to 2.6.33-stable
Don't dereference
.I target
if it is a symbolic link.
This flag allows security problems to be avoided in set-user-ID-\fIroot\fP
programs that allow unprivileged users to unmount filesystems.
.SH RETURN VALUE
On success, zero is returned.
On error, \-1 is returned, and
.I errno
is set appropriately.
.SH ERRORS
The error values given below result from filesystem type independent
errors.
Each filesystem type may have its own special errors and its
own special behavior.
See the Linux kernel source code for details.
.TP
.B EAGAIN
A call to
.BR umount2 ()
specifying
.B MNT_EXPIRE
successfully marked an unbusy filesystem as expired.
.TP
.B EBUSY
.I target
could not be unmounted because it is busy.
.TP
.B EFAULT
.I target
points outside the user address space.
.TP
.B EINVAL
.I target
is not a mount point.
.TP
.B EINVAL
.BR umount2 ()
was called with
.B MNT_EXPIRE
and either
.B MNT_DETACH
or
.BR MNT_FORCE .
.TP
.BR EINVAL " (since Linux 2.6.34)"
.BR umount2 ()
was called with an invalid flag value in
.IR flags .
.TP
.B ENAMETOOLONG
A pathname was longer than
.BR MAXPATHLEN .
.TP
.B ENOENT
A pathname was empty or had a nonexistent component.
.TP
.B ENOMEM
The kernel could not allocate a free page to copy filenames or data into.
.TP
.B EPERM
The caller does not have the required privileges.
.SH VERSIONS
.BR MNT_DETACH
and
.BR MNT_EXPIRE
.\" http://sourceware.org/bugzilla/show_bug.cgi?id=10092
are available in glibc since version 2.11.
.SH CONFORMING TO
These functions are Linux-specific and should not be used in
programs intended to be portable.
.SH NOTES
.SS umount() and shared mount points
Shared mount points cause any mount activity on a mount point, including
.BR umount (2)
operations, to be forwarded to every shared mount point in the
peer group and every slave mount of that peer group.
This means that
.BR umount (2)
of any peer in a set of shared mounts will cause all of its
peers to be unmounted and all of their slaves to be unmounted as well.

This propagation of unmount activity can be particularly surprising
on systems where every mount point is shared by default.
On such systems,
recursively bind mounting the root directory of the filesystem
onto a subdirectory and then later unmounting that subdirectory with
.BR MNT_DETACH
will cause every mount in the mount namespace to be lazily unmounted.

To ensure
.BR umount (2)
does not propagate in this fashion,
the mount point may be remounted using a
.BR mount (2)
call with a
.I mount_flags
argument that includes both
.BR MS_REC
and
.BR MS_PRIVATE
prior to
.BR umount (2)
being called.
.SS Historical details
The original
.BR umount ()
function was called as \fIumount(device)\fP and would return
.B ENOTBLK
when called with something other than a block device.
In Linux 0.98p4, a call \fIumount(dir)\fP was added, in order to
support anonymous devices.
In Linux 2.3.99-pre7, the call \fIumount(device)\fP was removed,
leaving only \fIumount(dir)\fP (since now devices can be mounted
in more than one place, so specifying the device does not suffice).
.SH SEE ALSO
.BR mount (2),
.BR path_resolution (7),
.BR mount (8),
.BR umount (8)
