diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2014-03-13 10:24:32 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2014-03-14 15:59:43 +0800 |
commit | fdb51c2696a43624ba4378fb61de7e492fa59d98 (patch) | |
tree | 7bec2dc876ac0814ba59b85518ab81bf3ca69988 /discover | |
parent | 43f340b66d8323c6e797868d07fc98482052ba35 (diff) | |
download | talos-petitboot-fdb51c2696a43624ba4378fb61de7e492fa59d98.tar.gz talos-petitboot-fdb51c2696a43624ba4378fb61de7e492fa59d98.zip |
discover: Call mount syscall directly
We used to use the mount binary to do filesystem autodetection. Since we
now know the fstype, we may as well call the mount syscall directly.
We add a log messages too, as we'll no longer get the 'running process:'
output from the process code, which is helpful is debugging discovery
issues.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover')
-rw-r--r-- | discover/device-handler.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c index 9c8dea8..8bac866 100644 --- a/discover/device-handler.c +++ b/discover/device-handler.c @@ -7,6 +7,7 @@ #include <mntent.h> #include <sys/stat.h> #include <sys/wait.h> +#include <sys/mount.h> #include <talloc/talloc.h> #include <list/list.h> @@ -831,9 +832,10 @@ static int mount_device(struct discover_device *dev) goto err_free; } - rc = process_run_simple(dev, pb_system_apps.mount, - dev->device_path, dev->mount_path, - "-t", fstype, "-o", "ro", NULL); + pb_log("mounting device %s read-only\n", dev->device_path); + errno = 0; + rc = mount(dev->device_path, dev->mount_path, fstype, + MS_RDONLY | MS_SILENT, ""); if (!rc) { dev->mounted = true; dev->mounted_rw = false; @@ -841,8 +843,8 @@ static int mount_device(struct discover_device *dev) return 0; } - pb_log("couldn't mount device %s: mount failed with rc %d\n", - dev->device_path, rc); + pb_log("couldn't mount device %s: mount failed: %s\n", + dev->device_path, strerror(errno)); pb_rmdir_recursive(mount_base(), dev->mount_path); err_free: @@ -853,15 +855,14 @@ err_free: static int umount_device(struct discover_device *dev) { - int status; + int rc; if (!dev->mounted || !dev->unmount) return 0; - status = process_run_simple(dev, pb_system_apps.umount, - dev->mount_path, NULL); - - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) + pb_log("unmounting device %s\n", dev->device_path); + rc = umount(dev->mount_path); + if (rc) return -1; dev->mounted = false; @@ -886,8 +887,9 @@ int device_request_write(struct discover_device *dev, bool *release) if (dev->mounted_rw) return 0; - rc = process_run_simple(dev, pb_system_apps.mount, dev->mount_path, - "-o", "remount,rw", NULL); + pb_log("remounting device %s read-write\n", dev->device_path); + rc = mount(dev->device_path, dev->mount_path, "", + MS_REMOUNT | MS_SILENT, ""); if (rc) return -1; @@ -901,8 +903,9 @@ void device_release_write(struct discover_device *dev, bool release) if (!release) return; - process_run_simple(dev, pb_system_apps.mount, dev->mount_path, - "-o", "remount,ro", NULL); + pb_log("remounting device %s read-only\n", dev->device_path); + mount(dev->device_path, dev->mount_path, "", + MS_REMOUNT | MS_RDONLY | MS_SILENT, ""); dev->mounted_rw = false; } |