summaryrefslogtreecommitdiff
path: root/pkg/util/mountOpts_linux.go
diff options
context:
space:
mode:
authorKir Kolyshkin <kolyshkin@gmail.com>2020-03-31 01:59:44 -0700
committerKir Kolyshkin <kolyshkin@gmail.com>2020-04-02 07:52:34 -0700
commite0614367ca27c2e47649e08291e0f1d19d42232e (patch)
tree8eeb95dd01fc5bed27cd08ffc61244950bed7d56 /pkg/util/mountOpts_linux.go
parentf2c42a3958d12b45375aeb2384a3a8a103203c1c (diff)
downloadpodman-e0614367ca27c2e47649e08291e0f1d19d42232e.tar.gz
podman-e0614367ca27c2e47649e08291e0f1d19d42232e.tar.bz2
podman-e0614367ca27c2e47649e08291e0f1d19d42232e.zip
pkg/spec.InitFSMounts: optimize
Instead of getting mount options from /proc/self/mountinfo, which is very costly to read/parse (and can even be unreliable), let's use statfs(2) to figure out the flags we need. [v2: move getting default options to pkg/util, make it linux-specific] Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Diffstat (limited to 'pkg/util/mountOpts_linux.go')
-rw-r--r--pkg/util/mountOpts_linux.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/pkg/util/mountOpts_linux.go b/pkg/util/mountOpts_linux.go
new file mode 100644
index 000000000..3eac4dd25
--- /dev/null
+++ b/pkg/util/mountOpts_linux.go
@@ -0,0 +1,23 @@
+package util
+
+import (
+ "os"
+
+ "golang.org/x/sys/unix"
+)
+
+func getDefaultMountOptions(path string) (defaultMountOptions, error) {
+ opts := defaultMountOptions{true, true, true}
+ if path == "" {
+ return opts, nil
+ }
+ var statfs unix.Statfs_t
+ if e := unix.Statfs(path, &statfs); e != nil {
+ return opts, &os.PathError{Op: "statfs", Path: path, Err: e}
+ }
+ opts.nodev = (statfs.Flags&unix.MS_NODEV == unix.MS_NODEV)
+ opts.noexec = (statfs.Flags&unix.MS_NOEXEC == unix.MS_NOEXEC)
+ opts.nosuid = (statfs.Flags&unix.MS_NOSUID == unix.MS_NOSUID)
+
+ return opts, nil
+}