summary refs log tree commit diff stats
path: root/results/scraper/launchpad-without-comments/1343827
diff options
context:
space:
mode:
authorChristian Krinitsin <mail@krinitsin.com>2025-06-30 12:24:58 +0000
committerChristian Krinitsin <mail@krinitsin.com>2025-06-30 12:27:06 +0000
commit33606b41d35115f887ea688b1a16f2ff85bf2fe4 (patch)
tree406b2c7b19a087ba437c68f3dbf0b589fa1d6150 /results/scraper/launchpad-without-comments/1343827
parentadedf8771bc4de3113041ca21bd4d0d1c0014b6a (diff)
downloademulator-bug-study-33606b41d35115f887ea688b1a16f2ff85bf2fe4.tar.gz
emulator-bug-study-33606b41d35115f887ea688b1a16f2ff85bf2fe4.zip
add launchpad bug reports without comments
Diffstat (limited to 'results/scraper/launchpad-without-comments/1343827')
-rw-r--r--results/scraper/launchpad-without-comments/134382744
1 files changed, 44 insertions, 0 deletions
diff --git a/results/scraper/launchpad-without-comments/1343827 b/results/scraper/launchpad-without-comments/1343827
new file mode 100644
index 00000000..2162909f
--- /dev/null
+++ b/results/scraper/launchpad-without-comments/1343827
@@ -0,0 +1,44 @@
+block.c: multiwrite_merge() truncates overlapping requests
+
+If the list of requests passed to multiwrite_merge() contains two requests where the first is for a range of sectors that is a strict subset of the second's, the second request is truncated to end where the first starts, so the second half of the second request is lost.
+
+This is easy to reproduce by running fio against a virtio-blk device running on qemu 2.1.0-rc1 with the below fio script. At least with fio 2.0.13, the randwrite pass will issue overlapping bios to the block driver, which the kernel is happy to pass along to qemu:
+
+[global]
+randrepeat=0
+ioengine=libaio
+iodepth=64
+direct=1
+size=1M
+numjobs=1
+verify_fatal=1
+verify_dump=1
+
+filename=$dev
+
+[seqwrite]
+blocksize_range=4k-1M
+rw=write
+verify=crc32c-intel
+
+[randwrite]
+stonewall
+blocksize_range=4k-1M
+rw=randwrite
+verify=meta
+
+Here is a naive fix for the problem that simply avoids merging problematic requests. I guess a better solution would be to redo qemu_iovec_concat() to do the right thing.
+
+diff -ur old/qemu-2.1.0-rc2/block.c qemu-2.1.0-rc2/block.c
+--- old/qemu-2.1.0-rc2/block.c  2014-07-15 14:49:14.000000000 -0700
++++ qemu-2.1.0-rc2/block.c      2014-07-17 23:03:14.224169741 -0700
+@@ -4460,7 +4460,9 @@
+         int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors;
+ 
+         // Handle exactly sequential writes and overlapping writes.
+-        if (reqs[i].sector <= oldreq_last) {
++        // If this request ends before the previous one, don't merge.
++        if (reqs[i].sector <= oldreq_last &&
++            reqs[i].sector + reqs[i].nb_sectors >= oldreq_last) {
+             merge = 1;
+         }
\ No newline at end of file