On Mon, Feb 02, 2009 at 06:08:14PM +0100, Jim Meyering wrote: > diff --git a/src/qemu_driver.c b/src/qemu_driver.c > index 09f69bf..596d940 100644 > --- a/src/qemu_driver.c > +++ b/src/qemu_driver.c > @@ -93,31 +93,19 @@ static void qemuDriverUnlock(struct qemud_driver *driver) > > static int qemudSetCloseExec(int fd) { > int flags; > - if ((flags = fcntl(fd, F_GETFD)) < 0) > - goto error; > - flags |= FD_CLOEXEC; > - if ((fcntl(fd, F_SETFD, flags)) < 0) > - goto error; > - return 0; > - error: > - qemudLog(QEMUD_ERR, > - "%s", _("Failed to set close-on-exec file descriptor flag\n")); > - return -1; > + return ((flags = fcntl(fd, F_GETFD)) < 0 > + || fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0 > + ? -1 > + : 0); > } > > > static int qemudSetNonBlock(int fd) { > int flags; > - if ((flags = fcntl(fd, F_GETFL)) < 0) > - goto error; > - flags |= O_NONBLOCK; > - if ((fcntl(fd, F_SETFL, flags)) < 0) > - goto error; > - return 0; > - error: > - qemudLog(QEMUD_ERR, > - "%s", _("Failed to set non-blocking file descriptor flag\n")); > - return -1; > + return ((flags = fcntl(fd, F_GETFL)) < 0 > + || fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0 > + ? -1 > + : 0); > } These two chunks can be left out, since those functions are completely removed by the next patch. > @@ -877,8 +865,7 @@ static int qemudWaitForMonitor(virConnectPtr conn, > qemudFindCharDevicePTYs, > "console", 3000); > if (close(logfd) < 0) > - qemudLog(QEMUD_WARN, _("Unable to close logfile: %s\n"), > - strerror(errno)); > + virReportSystemError(NULL, errno, "%s", _("Unable to close logfile")); This is not fatal to starting the VM, so should raise an error here. Could argue we shoud raise the log level to QEMUD_ERROR though. > @@ -1200,30 +1187,30 @@ static int qemudStartVMDaemon(virConnectPtr conn, > tmp = progenv; > while (*tmp) { > if (safewrite(vm->logfile, *tmp, strlen(*tmp)) < 0) > - qemudLog(QEMUD_WARN, _("Unable to write envv to logfile %d: %s\n"), > - errno, strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to write envv to logfile")); > if (safewrite(vm->logfile, " ", 1) < 0) > - qemudLog(QEMUD_WARN, _("Unable to write envv to logfile %d: %s\n"), > - errno, strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to write envv to logfile")); > tmp++; > } > tmp = argv; > while (*tmp) { > if (safewrite(vm->logfile, *tmp, strlen(*tmp)) < 0) > - qemudLog(QEMUD_WARN, _("Unable to write argv to logfile %d: %s\n"), > - errno, strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to write argv to logfile")); > if (safewrite(vm->logfile, " ", 1) < 0) > - qemudLog(QEMUD_WARN, _("Unable to write argv to logfile %d: %s\n"), > - errno, strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to write argv to logfile")); > tmp++; > } > if (safewrite(vm->logfile, "\n", 1) < 0) > - qemudLog(QEMUD_WARN, _("Unable to write argv to logfile %d: %s\n"), > - errno, strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to write argv to logfile")); > > if ((pos = lseek(vm->logfile, 0, SEEK_END)) < 0) > - qemudLog(QEMUD_WARN, _("Unable to seek to end of logfile %d: %s\n"), > - errno, strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to seek to end of logfile")); > > for (i = 0 ; i < ntapfds ; i++) > FD_SET(tapfds[i], &keepfd); Likewise all of those are non-fatal, so shouldn't be raising an error back to the caller, since the overall operation is still reporting success code. > @@ -1300,8 +1288,9 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED, > > if (virKillProcess(vm->pid, 0) == 0 && > virKillProcess(vm->pid, SIGTERM) < 0) > - qemudLog(QEMUD_ERROR, _("Failed to send SIGTERM to %s (%d): %s\n"), > - vm->def->name, vm->pid, strerror(errno)); > + virReportSystemError(conn, errno, > + _("Failed to send SIGTERM to %s (%d)"), > + vm->def->name, vm->pid); > > if (vm->monitor_watch != -1) { > virEventRemoveHandle(vm->monitor_watch); > @@ -1309,8 +1298,7 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED, > } > > if (close(vm->logfile) < 0) > - qemudLog(QEMUD_WARN, _("Unable to close logfile %d: %s\n"), > - errno, strerror(errno)); > + virReportSystemError(conn, errno, "%s", _("Unable to close logfile")); > if (vm->monitor != -1) > close(vm->monitor); > vm->logfile = -1; These two are both non-fatal to the proces of shutting down the VM daemon. In facton the 2nd case, I'm wondering why we still have the vm->logfile handle open at all. We are no longer responsible for logging stdout/err from the QEMU proess into the logfile, since we dup'd its stdout/err directly onto the logfile FD. So we shouldnt' have any reason to keep this open. > @@ -1477,8 +1465,8 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm, > > /* Log, but ignore failures to write logfile for VM */ > if (safewrite(vm->logfile, buf, strlen(buf)) < 0) > - qemudLog(QEMUD_WARN, _("Unable to log VM console data: %s\n"), > - strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to log VM console data")); > > *reply = buf; > return 0; > @@ -1487,8 +1475,8 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm, > if (buf) { > /* Log, but ignore failures to write logfile for VM */ > if (safewrite(vm->logfile, buf, strlen(buf)) < 0) > - qemudLog(QEMUD_WARN, _("Unable to log VM console data: %s\n"), > - strerror(errno)); > + virReportSystemError(NULL, errno, > + "%s", _("Unable to log VM console data")); > VIR_FREE(buf); > } > return -1; These two should stay as logging calls too, since they're not fatal. > @@ -1593,7 +1581,7 @@ static int kvmGetMaxVCPUs(void) { > > fd = open(KVM_DEVICE, O_RDONLY); > if (fd < 0) { > - qemudLog(QEMUD_WARN, _("Unable to open %s: %s\n"), KVM_DEVICE, strerror(errno)); > + virReportSystemError(NULL, errno, _("Unable to open %s"), KVM_DEVICE); > return maxvcpus; > } > This needs to report a real error code back to the user, since if we are using KVM vms, then /dev/kvm should always exist. Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list