Not an actual bug, clean up fsync conditions for clarity

It could be a bug if data_fd could be equal to journal_fd but not to meta_fd,
but it can't.
This commit is contained in:
Vitaliy Filippov
2026-06-13 19:55:47 +03:00
parent 43aa4cfff6
commit 15f69719e4
+11 -5
View File
@@ -29,9 +29,12 @@ bool blockstore_impl_t::has_unsynced()
bool blockstore_impl_t::submit_fsyncs(int & wait_count) bool blockstore_impl_t::submit_fsyncs(int & wait_count)
{ {
int n = (unsynced_meta_write_count > 0 && !dsk.disable_meta_fsync) + int n = (unsynced_meta_write_count > 0 && !dsk.disable_meta_fsync ? 1 : 0) +
(unsynced_buffer_write_count > 0 && !dsk.disable_journal_fsync && dsk.journal_fd != dsk.meta_fd) + (unsynced_buffer_write_count > 0 && !dsk.disable_journal_fsync &&
(unsynced_data_write_count > 0 && !dsk.disable_data_fsync && dsk.data_fd != dsk.meta_fd && dsk.data_fd != dsk.journal_fd); (!unsynced_meta_write_count || dsk.journal_fd != dsk.meta_fd) ? 1 : 0) +
(unsynced_data_write_count > 0 && !dsk.disable_data_fsync &&
(!unsynced_meta_write_count || dsk.data_fd != dsk.meta_fd) &&
(!unsynced_buffer_write_count || dsk.data_fd != dsk.journal_fd) ? 1 : 0);
if (ringloop->space_left() < n) if (ringloop->space_left() < n)
{ {
return false; return false;
@@ -60,7 +63,8 @@ bool blockstore_impl_t::submit_fsyncs(int & wait_count)
data->callback = cb; data->callback = cb;
wait_count++; wait_count++;
} }
if (unsynced_buffer_write_count > 0 && !dsk.disable_journal_fsync && dsk.meta_fd != dsk.journal_fd) if (unsynced_buffer_write_count > 0 && !dsk.disable_journal_fsync &&
(!unsynced_meta_write_count || dsk.journal_fd != dsk.meta_fd))
{ {
// fsync buffer // fsync buffer
io_uring_sqe *sqe = get_sqe(); io_uring_sqe *sqe = get_sqe();
@@ -71,7 +75,9 @@ bool blockstore_impl_t::submit_fsyncs(int & wait_count)
data->callback = cb; data->callback = cb;
wait_count++; wait_count++;
} }
if (unsynced_data_write_count > 0 && !dsk.disable_data_fsync && dsk.data_fd != dsk.meta_fd && dsk.data_fd != dsk.journal_fd) if (unsynced_data_write_count > 0 && !dsk.disable_data_fsync &&
(!unsynced_meta_write_count || dsk.data_fd != dsk.meta_fd) &&
(!unsynced_buffer_write_count || dsk.data_fd != dsk.journal_fd))
{ {
// fsync data // fsync data
io_uring_sqe *sqe = get_sqe(); io_uring_sqe *sqe = get_sqe();