summaryrefslogtreecommitdiffstats
path: root/daemon
diff options
context:
space:
mode:
Diffstat (limited to 'daemon')
-rw-r--r--daemon/daemon.h22
-rw-r--r--daemon/guestfsd.c16
-rw-r--r--daemon/sync.c5
3 files changed, 31 insertions, 12 deletions
diff --git a/daemon/daemon.h b/daemon/daemon.h
index da991b17..4a686c09 100644
--- a/daemon/daemon.h
+++ b/daemon/daemon.h
@@ -33,6 +33,8 @@
/*-- in guestfsd.c --*/
extern int verbose;
+extern int autosync_umount;
+
extern const char *sysroot;
extern int sysroot_len;
@@ -253,17 +255,21 @@ extern void notify_progress (uint64_t position, uint64_t total);
*/
#define CHROOT_IN \
do { \
- int __old_errno = errno; \
- if (chroot (sysroot) == -1) \
- perror ("CHROOT_IN: sysroot"); \
- errno = __old_errno; \
+ if (sysroot_len > 0) { \
+ int __old_errno = errno; \
+ if (chroot (sysroot) == -1) \
+ perror ("CHROOT_IN: sysroot"); \
+ errno = __old_errno; \
+ } \
} while (0)
#define CHROOT_OUT \
do { \
- int __old_errno = errno; \
- if (chroot (".") == -1) \
- perror ("CHROOT_OUT: ."); \
- errno = __old_errno; \
+ if (sysroot_len > 0) { \
+ int __old_errno = errno; \
+ if (chroot (".") == -1) \
+ perror ("CHROOT_OUT: ."); \
+ errno = __old_errno; \
+ } \
} while (0)
/* Marks functions which are not implemented.
diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
index a8b53e73..8e77cba6 100644
--- a/daemon/guestfsd.c
+++ b/daemon/guestfsd.c
@@ -118,6 +118,9 @@ winsock_init (void)
const char *sysroot = "/sysroot"; /* No trailing slash. */
int sysroot_len = 8;
+/* If set (the default), do 'umount-all' when performing autosync. */
+int autosync_umount = 1;
+
/* Not used explicitly, but required by the gnulib 'error' module. */
const char *program_name = "guestfsd";
@@ -125,13 +128,13 @@ static void
usage (void)
{
fprintf (stderr,
- "guestfsd [-f|--foreground] [-v|--verbose]\n");
+ "guestfsd [-f|--foreground] [-v|--verbose] [-r]\n");
}
int
main (int argc, char *argv[])
{
- static const char *options = "fv?";
+ static const char *options = "frv?";
static const struct option long_options[] = {
{ "foreground", 0, 0, 'f' },
{ "help", 0, 0, '?' },
@@ -173,6 +176,15 @@ main (int argc, char *argv[])
dont_fork = 1;
break;
+ /* The -r flag is used when running standalone. It changes
+ * several aspects of the daemon.
+ */
+ case 'r':
+ sysroot = "";
+ sysroot_len = 0;
+ autosync_umount = 0;
+ break;
+
case 'v':
verbose = 1;
break;
diff --git a/daemon/sync.c b/daemon/sync.c
index 25c7de89..8f5a461b 100644
--- a/daemon/sync.c
+++ b/daemon/sync.c
@@ -51,9 +51,10 @@ do_sync (void)
int
do_internal_autosync (void)
{
- int r;
+ int r = 0;
- r = do_umount_all ();
+ if (autosync_umount)
+ r = do_umount_all ();
sync_disks ();