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; }