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>
#include <mntent.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <mntent.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <talloc/talloc.h>
#include <list/list.h>
#include <talloc/talloc.h>
#include <list/list.h>
- 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;
if (!rc) {
dev->mounted = true;
dev->mounted_rw = false;
- 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:
pb_rmdir_recursive(mount_base(), dev->mount_path);
err_free:
static int umount_device(struct discover_device *dev)
{
static int umount_device(struct discover_device *dev)
{
if (!dev->mounted || !dev->unmount)
return 0;
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;
return -1;
dev->mounted = false;
if (dev->mounted_rw)
return 0;
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, "");
- 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;
}
dev->mounted_rw = false;
}