summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2014-03-13 10:24:32 +0800
committerJeremy Kerr <jk@ozlabs.org>2014-03-14 15:59:43 +0800
commitfdb51c2696a43624ba4378fb61de7e492fa59d98 (patch)
tree7bec2dc876ac0814ba59b85518ab81bf3ca69988 /discover
parent43f340b66d8323c6e797868d07fc98482052ba35 (diff)
downloadtalos-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.c31
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;
}
OpenPOWER on IntegriCloud