1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
// Copyright 2018-2022 System76 <info@system76.com>
// SPDX-License-Identifier: MIT OR Apache-2.0
use libc::{
c_int, c_ulong, MNT_DETACH, MNT_EXPIRE, MNT_FORCE, MS_BIND, MS_DIRSYNC, MS_MANDLOCK, MS_MOVE,
MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RDONLY, MS_RELATIME, MS_REMOUNT,
MS_SILENT, MS_STRICTATIME, MS_SYNCHRONOUS, O_NOFOLLOW,
};
bitflags! {
/// Flags which may be specified when mounting a file system.
pub struct MountFlags: c_ulong {
/// Perform a bind mount, making a file or a directory subtree visible at another
/// point within a file system. Bind mounts may cross file system boundaries and
/// span chroot(2) jails. The filesystemtype and data arguments are ignored. Up
/// until Linux 2.6.26, mountflags was also ignored (the bind mount has the same
/// mount options as the underlying mount point).
const BIND = MS_BIND;
/// Make directory changes on this file system synchronous.(This property can be
/// obtained for individual directories or subtrees using chattr(1).)
const DIRSYNC = MS_DIRSYNC;
/// Permit mandatory locking on files in this file system. (Mandatory locking must
/// still be enabled on a per-file basis, as described in fcntl(2).)
const MANDLOCK = MS_MANDLOCK;
/// Move a subtree. source specifies an existing mount point and target specifies
/// the new location. The move is atomic: at no point is the subtree unmounted.
/// The filesystemtype, mountflags, and data arguments are ignored.
const MOVE = MS_MOVE;
/// Do not update access times for (all types of) files on this file system.
const NOATIME = MS_NOATIME;
/// Do not allow access to devices (special files) on this file system.
const NODEV = MS_NODEV;
/// Do not update access times for directories on this file system. This flag provides
/// a subset of the functionality provided by MS_NOATIME; that is, MS_NOATIME implies
/// MS_NODIRATIME.
const NODIRATIME = MS_NODIRATIME;
/// Do not allow programs to be executed from this file system.
const NOEXEC = MS_NOEXEC;
/// Do not honor set-user-ID and set-group-ID bits when executing programs from this
/// file system.
const NOSUID = MS_NOSUID;
/// Mount file system read-only.
const RDONLY = MS_RDONLY;
/// When a file on this file system is accessed, only update the file's last access
/// time (atime) if the current value of atime is less than or equal to the file's
/// last modification time (mtime) or last status change time (ctime). This option is
/// useful for programs, such as mutt(1), that need to know when a file has been read
/// since it was last modified. Since Linux 2.6.30, the kernel defaults to the behavior
/// provided by this flag (unless MS_NOATIME was specified), and the MS_STRICTATIME
/// flag is required to obtain traditional semantics. In addition, since Linux 2.6.30,
/// the file's last access time is always updated if it is more than 1 day old.
const RELATIME = MS_RELATIME;
/// Remount an existing mount. This allows you to change the mountflags and data of an
/// existing mount without having to unmount and remount the file system. target should
/// be the same value specified in the initial mount() call; source and filesystemtype
/// are ignored.
///
/// The following mountflags can be changed: MS_RDONLY, MS_SYNCHRONOUS, MS_MANDLOCK;
/// before kernel 2.6.16, the following could also be changed: MS_NOATIME and
/// MS_NODIRATIME; and, additionally, before kernel 2.4.10, the following could also
/// be changed: MS_NOSUID, MS_NODEV, MS_NOEXEC.
const REMOUNT = MS_REMOUNT;
/// Suppress the display of certain (printk()) warning messages in the kernel log.
/// This flag supersedes the misnamed and obsolete MS_VERBOSE flag (available
/// since Linux 2.4.12), which has the same meaning.
const SILENT = MS_SILENT;
/// Always update the last access time (atime) when files on this file system are
/// accessed. (This was the default behavior before Linux 2.6.30.) Specifying this
/// flag overrides the effect of setting the MS_NOATIME and MS_RELATIME flags.
const STRICTATIME = MS_STRICTATIME;
/// Make writes on this file system synchronous (as though the O_SYNC flag to
/// open(2) was specified for all file opens to this file system).
const SYNCHRONOUS = MS_SYNCHRONOUS;
}
}
bitflags! {
/// Flags which may be specified when unmounting a file system.
pub struct UnmountFlags: c_int {
/// Force unmount even if busy. This can cause data loss. (Only for NFS mounts.)
const FORCE = MNT_FORCE;
/// Perform a lazy unmount: make the mount point unavailable for new accesses,
/// and actually perform the unmount when the mount point ceases to be busy.
const DETACH = MNT_DETACH;
/// Mark the mount point as expired. If a mount point is not currently in use,
/// then an initial call to umount2() with this flag fails with the error 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 umount2() call specifying
/// MNT_EXPIRE unmounts an expired mount point. This flag cannot be specified with
/// either MNT_FORCE or MNT_DETACH.
const EXPIRE = MNT_EXPIRE;
/// Don't dereference target if it is a symbolic link. This flag allows security
/// problems to be avoided in set-user-ID-root programs that allow unprivileged
/// users to unmount file systems.
const NOFOLLOW = O_NOFOLLOW;
}
}