A question: Should we go to 1999 version of C and modernize the struct initialization in these few files a bit? its very easy to make a mistake in the positional struct init, at least for me, especially with so many NULLs (0s) next to each other.
Also in 3 out of 4 files in that patch 0 is used, and in 1 file explicit NULL is used to denote that function is not present, should we align them all to 0? Regards, Milos On Mon, Jan 26, 2026 at 9:22 PM Milos Nikic <[email protected]> wrote: > Along side the store_sync this adds sync to other often used stores. > --- > libstore/file.c | 9 ++++++++- > libstore/mvol.c | 20 +++++++++++++++++++- > libstore/remap.c | 9 ++++++++- > libstore/stripe.c | 21 ++++++++++++++++++++- > 4 files changed, 55 insertions(+), 4 deletions(-) > > diff --git a/libstore/file.c b/libstore/file.c > index 80d6812a..5f6d7a46 100644 > --- a/libstore/file.c > +++ b/libstore/file.c > @@ -76,6 +76,12 @@ file_write (struct store *store, > return io_write (store->port, (void *) buf, len, addr * bsize, amount); > } > > +static error_t > +file_store_sync (struct store *store) > +{ > + return file_sync (store->port, 1, 0); > +} > + > static error_t > file_store_set_size (struct store *store, size_t newsize) > { > @@ -225,7 +231,8 @@ store_file_class = > { > STORAGE_HURD_FILE, "file", file_read, file_write, file_store_set_size, > store_std_leaf_allocate_encoding, store_std_leaf_encode, file_decode, > - file_set_flags, file_clear_flags, 0, 0, 0, file_open, 0, file_map > + file_set_flags, file_clear_flags, 0, 0, 0, file_open, 0, file_map, > + file_store_sync > }; > STORE_STD_CLASS (file); > > diff --git a/libstore/mvol.c b/libstore/mvol.c > index ee1526be..06d894b1 100644 > --- a/libstore/mvol.c > +++ b/libstore/mvol.c > @@ -70,6 +70,23 @@ mvol_write (struct store *store, > return err; > } > > +static error_t > +mvol_sync (struct store *store) > +{ > + size_t i; > + error_t err = 0; > + > + /* We iterate through all known volumes to ensure > + even inactive volumes are flushed to disk. */ > + for (i = 0; i < store->num_children; i++) > + { > + error_t e = store_sync (store->children[i]); > + if (e) > + err = e; > + } > + return err; > +} > + > static error_t > mvol_set_size (struct store *store, size_t newsize) > { > @@ -89,7 +106,8 @@ store_mvol_class = > { > -1, "mvol", mvol_read, mvol_write, mvol_set_size, > 0, 0, 0, > - store_set_child_flags, store_clear_child_flags, 0, 0, mvol_remap > + store_set_child_flags, store_clear_child_flags, 0, 0, mvol_remap, > + 0, 0, 0, mvol_sync > }; > STORE_STD_CLASS (mvol); > > diff --git a/libstore/remap.c b/libstore/remap.c > index de21812e..54ae31c2 100644 > --- a/libstore/remap.c > +++ b/libstore/remap.c > @@ -41,6 +41,12 @@ remap_write (struct store *store, > return store_write (store->children[0], addr, buf, len, amount); > } > > +static error_t > +remap_sync (struct store * store) > +{ > + return store_sync (store->children[0]); > +} > + > static error_t > remap_set_size (struct store *store, size_t newsize) > { > @@ -210,7 +216,8 @@ store_remap_class = > remap_allocate_encoding, remap_encode, remap_decode, > store_set_child_flags, store_clear_child_flags, > NULL, NULL, NULL, /* cleanup, clone, remap */ > - remap_open, remap_validate_name > + remap_open, remap_validate_name, > + NULL, remap_sync > }; > STORE_STD_CLASS (remap); > > diff --git a/libstore/stripe.c b/libstore/stripe.c > index e9c58466..7e437f86 100644 > --- a/libstore/stripe.c > +++ b/libstore/stripe.c > @@ -57,6 +57,24 @@ stripe_write (struct store *store, > store_write (stripe, addr_adj (addr, store, stripe), buf, len, > amount); > } > > +static error_t > +stripe_sync (struct store *store) > +{ > + size_t i; > + error_t err = 0; > + > + for (i = 0; i < store->num_children; i++) > + { > + error_t e = store_sync (store->children[i]); > + /* If any child fails, we record the error but continue > + syncing the others to maximize data safety. */ > + if (e) > + err = e; > + } > + > + return err; > +} > + > error_t > stripe_set_size (struct store *store, size_t newsize) > { > @@ -113,7 +131,8 @@ store_ileave_class = > { > STORAGE_INTERLEAVE, "interleave", stripe_read, stripe_write, > stripe_set_size, > ileave_allocate_encoding, ileave_encode, ileave_decode, > - store_set_child_flags, store_clear_child_flags, 0, 0, stripe_remap > + store_set_child_flags, store_clear_child_flags, 0, 0, stripe_remap, > + 0, 0, 0, stripe_sync > }; > STORE_STD_CLASS (ileave); > > -- > 2.52.0 > >
