From 59a4c0d7e362269c708ab8359f7e47e952ab245e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 1 Dec 2022 17:17:46 +0100 Subject: [PATCH] test-loop-block: let's explicitly flush buffer cache on whole block device Let's explicitly flush the kernel's buffer cache on the whole block device once we ran "mkfs". This is necessary, because partition and whole block devices maintain separate buffer caches, and thus writing to one will not be visible on the other if cached there already, until the latter's cache is explicitly flushed. This is preparation for later adding support for probing file sytems also if we have no open partition block devices, and hence want to use the whole block device instead. --- src/test/test-loop-block.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/test-loop-block.c b/src/test/test-loop-block.c index 01db8b092ec..b06ab0d1726 100644 --- a/src/test/test-loop-block.c +++ b/src/test/test-loop-block.c @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include "alloc-util.h" #include "capability-util.h" @@ -256,6 +258,13 @@ static int run(int argc, char *argv[]) { dissected = dissected_image_unref(dissected); + /* We created the file systems now via the per-partition block devices. But the dissection code might + * probe them via the whole block device. These block devices have separate buffer caches though, + * hence what was written via the partition device might not appear on the whole block device + * yet. Let's hence explicitly flush the whole block device, so that the read-back definitely + * works. */ + assert_se(ioctl(loop->fd, BLKFLSBUF, 0) >= 0); + /* Try to read once, without pinning or adding partitions, i.e. by only accessing the whole block * device. */ assert_se(dissect_loop_device(loop, NULL, NULL, 0, &dissected) >= 0);