fsync() of an EC file that was not modified (e.g. opened read-only, or RDONLY layout with no dirty pages) blocks until an unavailable data OST returns, because cl_sync_file_range() sends OST_SYNC to every stripe. See the LU-20212 test results.
osc_io_fsync_end < cl_io_end < lov_io_end_wrapper < lov_io_fsync_end < cl_io_end < cl_io_loop < cl_sync_file_range < ll_fsync < vfs_fsync_range < do_fsync
The same happens from writeback (ll_writepages()->cl_sync_file_range() in the flush worker). A stripe with no dirty or uncommitted pages on this client has nothing to sync, so the OST_SYNC for it could be skipped, making fsync() of an unmodified file a no-op that does not depend on OST availability.
- is related to
-
LU-20212 FLR-ECRO: verify non-write RPCs do not block client
-
- Open
-