mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-07-26 18:13:24 +00:00
1. HIGH: LinkedWriteFsync now uses SubmitLinkRequests (IOSQE_IO_LINK) instead of SubmitRequests, ensuring write+fdatasync execute as a linked chain in the kernel. Falls back to sequential on error. 2. HIGH: PreadBatch/PwriteBatch chunk ops by ring capacity to prevent "too many requests" rejection when dirty map exceeds ring size (256). 3. MED: CloseBatchIO() added to Flusher, called in BlockVol.Close() after final flush to release io_uring ring / kernel resources. 4. MED: Sync parity — both standard and io_uring paths now use fdatasync (via platform-specific fdatasync_linux.go / fdatasync_other.go). Standard path previously used fsync; now matches io_uring semantics. On non-Linux, fdatasync falls back to fsync (only option available). 10 batchio tests, all blockvol tests pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
15 lines
280 B
Go
15 lines
280 B
Go
//go:build linux
|
|
|
|
package batchio
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
)
|
|
|
|
// fdatasync flushes file data to disk without updating metadata (mtime, size).
|
|
// On Linux, this uses the fdatasync(2) syscall directly.
|
|
func fdatasync(fd *os.File) error {
|
|
return syscall.Fdatasync(int(fd.Fd()))
|
|
}
|