summaryrefslogtreecommitdiff
path: root/Base/usr
diff options
context:
space:
mode:
authorLiav A <liavalb@gmail.com>2020-03-26 02:51:16 +0200
committerAndreas Kling <kling@serenityos.org>2020-04-02 12:03:08 +0200
commita60ea79a41845767ce40f225de20da7c99534ad1 (patch)
tree771b082c27a3cf8060fb23a8548be83ec8837677 /Base/usr
parent6b59311d4bdc1447e085573f9bd2c42819e264dd (diff)
downloadserenity-a60ea79a41845767ce40f225de20da7c99534ad1.zip
Kernel & Userland: Allow to mount image files formatted with Ext2FS
Diffstat (limited to 'Base/usr')
-rw-r--r--Base/usr/share/man/man2/mount.md28
-rw-r--r--Base/usr/share/man/man8/mount.md32
2 files changed, 39 insertions, 21 deletions
diff --git a/Base/usr/share/man/man2/mount.md b/Base/usr/share/man/man2/mount.md
index 1d54e6be2c..5f69543802 100644
--- a/Base/usr/share/man/man2/mount.md
+++ b/Base/usr/share/man/man2/mount.md
@@ -7,12 +7,13 @@ mount - mount a filesystem
```**c++
#include <unistd.h>
-int mount(const char* source, const char* target, const char* fs_type, int flags);
+int mount(int source_fd, const char* target, const char* fs_type, int flags);
```
## Description
-`mount()` mounts a filesystem stored at `source` by overlaying its contents over `target`.
+`mount()` mounts a filesystem stored at `source_fd` by overlaying its contents
+over `target`.
`fs_type` must be one of the following supported filesystems:
@@ -21,9 +22,10 @@ int mount(const char* source, const char* target, const char* fs_type, int flags
* `DevPtsFS` (or `devpts`): The pseudoterminal pseudo-filesystem (normally mounted at `/dev/pts`).
* `TmpFS` (or `tmp`): A non-persistent filesystem that stores all its data in RAM. An instance of this filesystem is normally mounted at `/tmp`.
-For Ext2FS, `source` must be a path to a block device storing the filesystem contents. All
-the other filesystems ignore the `source` argument (by convention, it should have the same
-value as `fs_type`).
+For Ext2FS, `source_fd` must refer to an open file descriptor to a file containing
+the filesystem image. This may be a device file or any other seekable file. All
+the other filesystems ignore the `source_fd` — you can even pass an invalid file
+descriptor such as -1.
The following `flags` are supported:
@@ -37,14 +39,22 @@ mounted file system.
### Bind mounts
-If `MS_BIND` is specified in `flags`, `fs_type` is ignored and a bind mount is performed
-instead. In this case `source` is treated as a path to a file or directory whose contents
-are overlayed over `target`. This can be used as an alternative to symlinks or hardlinks.
+If `MS_BIND` is specified in `flags`, `fs_type` is ignored and a bind mount is
+performed instead. In this case, the file or directory specified by `source_fd`
+is overlayed over `target` — the target appears to be replaced by a copy of the
+source. This can be used as an alternative to symlinks or hardlinks.
## Errors
+* `EFAULT`: The `fs_type` or `target` are invalid strings.
* `EPERM`: The current process does not have superuser privileges.
-* `ENODEV`: The `fs_type` is unrecognized, or the device is not found, or the device doesn't contain a valid filesystem image.
+* `ENODEV`: The `fs_type` is unrecognized, or the file descriptor to source is
+ not found, or the source doesn't contain a valid filesystem image. Also, this
+ error occurs if `fs_type` is valid, but the file descriptor from `source_fd`
+ is not seekable.
+* `EBADF`: If the `source_fd` is not valid, and either `fs_type` specifies a
+ file-backed filesystem (and not a pseudo filesystem), or `MS_BIND` is
+ specified in flags.
All of the usual path resolution errors may also occur.
diff --git a/Base/usr/share/man/man8/mount.md b/Base/usr/share/man/man8/mount.md
index 7f0b9c2c4b..f63d45cf23 100644
--- a/Base/usr/share/man/man8/mount.md
+++ b/Base/usr/share/man/man8/mount.md
@@ -12,18 +12,26 @@ $ mount
## Description
-If invoked without any arguments, `mount` prints a list of all currently mounted filesystems.
-
-If invoked as `mount -a`, `mount` mounts all the filesystems configured in `/etc/fstab`. This
-is normally done on system startup by [`SystemServer`(7)](../man7/SystemServer.md).
-
-Otherwise, `mount` performs a single filesystem mount. Source, target, and fstype have the
-same meaning as in the [`mount`(2)](../man2/mount.md) syscall (if not specified, fstype
-defaults to `ext2`).
-
-Options correspond to the mount flags, and should be specified as a comma-separated list of
-flag names (lowercase and without the `MS_` prefix). Additionally, the name `defaults` is
-accepted and ignored.
+If invoked without any arguments, `mount` prints a list of all currently mounted
+filesystems.
+
+If invoked as `mount -a`, `mount` mounts all the filesystems configured in
+`/etc/fstab`. This is normally done on system startup by
+[`SystemServer`(7)](../man7/SystemServer.md).
+
+Otherwise, `mount` performs a single filesystem mount. Source should be a path
+to a file containing the filesystem image. Target, and fstype have the same
+meaning as in the [`mount`(2)](../man2/mount.md) syscall (if not specified,
+fstype defaults to `ext2`).
+
+A special source value "none" is recognized, in which case
+[`mount`(8)](mount.md) will not attempt to open the source as a file, and will
+pass an invalid file descriptor to [`mount`(2)](../man2/mount.md). This is
+useful for mounting pseudo filesystems.
+
+Options correspond to the mount flags, and should be specified as a
+comma-separated list of flag names (lowercase and without the `MS_` prefix).
+Additionally, the name `defaults` is accepted and ignored.
## Files