Bläddra i källkod

Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2020-07-13' into staging

NBD patches for 2020-07-13

- fix off-by-one truncation in corner-case name display
- use fcntl correctly
- iotest cleanups that enable testing an upcoming fix for NBD close

# gpg: Signature made Mon 13 Jul 2020 15:11:35 BST
# gpg:                using RSA key 71C2CC22B1C4602927D2F3AAA7A16B4A2527436A
# gpg: Good signature from "Eric Blake <eblake@redhat.com>" [full]
# gpg:                 aka "Eric Blake (Free Software Programmer) <ebb9@byu.net>" [full]
# gpg:                 aka "[jpeg image of size 6874]" [full]
# Primary key fingerprint: 71C2 CC22 B1C4 6029 27D2  F3AA A7A1 6B4A 2527 436A

* remotes/ericb/tags/pull-nbd-2020-07-13:
  iotests.py: filter_testfiles(): filter SOCK_DIR too
  iotests.py: QemuIoInteractive: print output on failure
  iotests: QemuIoInteractive: use qemu_io_args_no_fmt
  hax: Fix setting of FD_CLOEXEC
  nbd: Avoid off-by-one in long export name truncation

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Peter Maydell 5 år sedan
förälder
incheckning
1a53dfee92
3 ändrade filer med 15 tillägg och 8 borttagningar
  1. 1 1
      block/nbd.c
  2. 3 3
      target/i386/hax-posix.c
  3. 11 4
      tests/qemu-iotests/iotests.py

+ 1 - 1
block/nbd.c

@@ -2002,7 +2002,7 @@ static void nbd_refresh_filename(BlockDriverState *bs)
         len = snprintf(bs->exact_filename, sizeof(bs->exact_filename),
         len = snprintf(bs->exact_filename, sizeof(bs->exact_filename),
                        "nbd://%s:%s", host, port);
                        "nbd://%s:%s", host, port);
     }
     }
-    if (len > sizeof(bs->exact_filename)) {
+    if (len >= sizeof(bs->exact_filename)) {
         /* Name is too long to represent exactly, so leave it empty. */
         /* Name is too long to represent exactly, so leave it empty. */
         bs->exact_filename[0] = '\0';
         bs->exact_filename[0] = '\0';
     }
     }

+ 3 - 3
target/i386/hax-posix.c

@@ -23,7 +23,7 @@ hax_fd hax_mod_open(void)
         fprintf(stderr, "Failed to open the hax module\n");
         fprintf(stderr, "Failed to open the hax module\n");
     }
     }
 
 
-    fcntl(fd, F_SETFD, FD_CLOEXEC);
+    qemu_set_cloexec(fd);
 
 
     return fd;
     return fd;
 }
 }
@@ -147,7 +147,7 @@ hax_fd hax_host_open_vm(struct hax_state *hax, int vm_id)
     fd = open(vm_name, O_RDWR);
     fd = open(vm_name, O_RDWR);
     g_free(vm_name);
     g_free(vm_name);
 
 
-    fcntl(fd, F_SETFD, FD_CLOEXEC);
+    qemu_set_cloexec(fd);
 
 
     return fd;
     return fd;
 }
 }
@@ -200,7 +200,7 @@ hax_fd hax_host_open_vcpu(int vmid, int vcpuid)
     if (fd < 0) {
     if (fd < 0) {
         fprintf(stderr, "Failed to open the vcpu devfs\n");
         fprintf(stderr, "Failed to open the vcpu devfs\n");
     }
     }
-    fcntl(fd, F_SETFD, FD_CLOEXEC);
+    qemu_set_cloexec(fd);
     return fd;
     return fd;
 }
 }
 
 

+ 11 - 4
tests/qemu-iotests/iotests.py

@@ -212,12 +212,18 @@ def get_virtio_scsi_device():
 
 
 class QemuIoInteractive:
 class QemuIoInteractive:
     def __init__(self, *args):
     def __init__(self, *args):
-        self.args = qemu_io_args + list(args)
+        self.args = qemu_io_args_no_fmt + list(args)
         self._p = subprocess.Popen(self.args, stdin=subprocess.PIPE,
         self._p = subprocess.Popen(self.args, stdin=subprocess.PIPE,
                                    stdout=subprocess.PIPE,
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.STDOUT,
                                    stderr=subprocess.STDOUT,
                                    universal_newlines=True)
                                    universal_newlines=True)
-        assert self._p.stdout.read(9) == 'qemu-io> '
+        out = self._p.stdout.read(9)
+        if out != 'qemu-io> ':
+            # Most probably qemu-io just failed to start.
+            # Let's collect the whole output and exit.
+            out += self._p.stdout.read()
+            self._p.wait(timeout=1)
+            raise ValueError(out)
 
 
     def close(self):
     def close(self):
         self._p.communicate('q\n')
         self._p.communicate('q\n')
@@ -339,8 +345,9 @@ def filter_qmp(qmsg, filter_fn):
     return qmsg
     return qmsg
 
 
 def filter_testfiles(msg):
 def filter_testfiles(msg):
-    prefix = os.path.join(test_dir, "%s-" % (os.getpid()))
-    return msg.replace(prefix, 'TEST_DIR/PID-')
+    pref1 = os.path.join(test_dir, "%s-" % (os.getpid()))
+    pref2 = os.path.join(sock_dir, "%s-" % (os.getpid()))
+    return msg.replace(pref1, 'TEST_DIR/PID-').replace(pref2, 'SOCK_DIR/PID-')
 
 
 def filter_qmp_testfiles(qmsg):
 def filter_qmp_testfiles(qmsg):
     def _filter(_key, value):
     def _filter(_key, value):