I solved the invalid write, but I am still stuck on the syncing.

Apparently I needed to use the fs tied to the `handle` like so:

```cpp
handle->fs().write(handle, bufrange, out);
```

So now I focused on the actual syncing, so I added the following:

```cpp
      handle->fs().queue_sync(handle);

      auto res = handle->fs().complete_sync(handle);
      while (res == Vfs::File_io_service::SYNC_QUEUED) {
        root_dir.commit_and_wait();
      }
```

With `root_dir` being the following:

```cpp
  Genode::Root_directory root_dir = rom.node().with_sub_node(
      "vfs",
      [&](const Genode::Node &config) -> Genode::Root_directory {
        return {env, heap, config};
      },
      [&]() -> Genode::Root_directory {
        Genode::error(
            "VFS was not configured properly: missing <vfs> under <config>");
        return {env, heap, Genode::Node()};
      });
```

The first file gets written to disk, however, after that the program blocks 
again and
no more writes are started. Am I handling the sync correctly?

Best,
Rumen

________________________________________
From: Rumen Mitov via users <[email protected]>
Sent: Tuesday, June 23, 2026 7:28 PM
To: Ryan Davidovics via users
Cc: Rumen Mitov
Subject: How to Explicitly Sync When Appending to a File

CAUTION: This email originated from outside the organization. Do not click 
links or open attachments unless you recognize the sender and know the content 
is safe.


Hello,

I would like to sync the file-system after every invocation to 
`Genode::Append_file::append()`.
However, the `_sync()` interface is private as are the Genode::Append_file's 
`_io` and `_handle`.

What is the recommended way to sync?

I tried using handles as well:

```cpp
      Vfs::File_system &fs{root_dir.root_dir()};
      Vfs::Vfs_handle *handle {};

    fs.open("foo",
                  Vfs::Directory_service::Open_mode::OPEN_MODE_RDWR |
                  Vfs::Directory_service::Open_mode::OPEN_MODE_CREATE,
                  &handle, heap);

     // file opens properly

    for (long long unsigned i = 0; i < 10; i++) {
      auto _str = Genode::String<512>(Genode::Hex(i), "\n");
      Genode::Const_byte_range_ptr const bufrange { _str.string(), 
_str.length() };
      Genode::size_t out = 0;

      auto res = fs.write(handle, bufrange, out);
      handle->advance_seek(out);

      Genode::warning("WROTE: ", out, "B, RES: ", (Genode::uint32_t)res);
    }

    fs.close(handle);
```

However, before I could add syncing to the above example, I noticed that 
`fs.write()`
returns WRITE_ERR_INVALID. I am stuck on what could be wrong, as I based this 
example off of the
internal implementation of `Genode::Writeable_file`.

As always, any help is greatly appreciated :)

Best,
Rumen


P.S. This was tested on rump-ext2fs.
_______________________________________________
users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Archived at 
https://lists.genode.org/mailman3/hyperkitty/list/[email protected]/message/U3SMB4QQFEE32E266XRXXEQSGEYJKN6M/
_______________________________________________
users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Archived at 
https://lists.genode.org/mailman3/hyperkitty/list/[email protected]/message/HDDV4YOWEPOFMYDZ6WY5GYA3RMF7VBLG/

Reply via email to