diff --git a/repos/libports/recipes/pkg/test-libc_vfs_block/runtime b/repos/libports/recipes/pkg/test-libc_vfs_block/runtime
index 1926f1f510..a4bf063c52 100644
--- a/repos/libports/recipes/pkg/test-libc_vfs_block/runtime
+++ b/repos/libports/recipes/pkg/test-libc_vfs_block/runtime
@@ -68,6 +68,16 @@
+
+
+ write operation by reading back the content. -->
+
+
+
+
+
+
+
diff --git a/repos/libports/src/test/libc_vfs_block/main.cc b/repos/libports/src/test/libc_vfs_block/main.cc
index 1621bc93fc..3d09abc695 100644
--- a/repos/libports/src/test/libc_vfs_block/main.cc
+++ b/repos/libports/src/test/libc_vfs_block/main.cc
@@ -194,6 +194,8 @@ class Test::Block_device
return result;
}
+
+ void sync() { fsync(_fd.value); }
};
@@ -253,6 +255,12 @@ void Test::Main::_exec_step(Genode::Xml_node step, Block_device &block_device)
Genode::error("step '", step, "' failed");
throw Step_failed();
}
+
+ if (step.has_type("sync")) {
+ Genode::log("sync");
+ block_device.sync();
+ return;
+ }
}
diff --git a/repos/os/src/lib/vfs/block_file_system.h b/repos/os/src/lib/vfs/block_file_system.h
index 0cd108068a..580e24fb9c 100644
--- a/repos/os/src/lib/vfs/block_file_system.h
+++ b/repos/os/src/lib/vfs/block_file_system.h
@@ -332,7 +332,12 @@ class Vfs::Block_file_system::Data_file_system : public Single_file_system
_tx_source->release_packet(p);
if (!p.succeeded()) {
- Genode::error("vfs_block: syncing blocks failed");
+ /* only warn once if sync is not supported */
+ static bool print_sync_failed = true;
+ if (print_sync_failed) {
+ Genode::warning("vfs_block: syncing blocks failed");
+ print_sync_failed = false;
+ }
return SYNC_ERR_INVALID;
}