fs: handle EINTR in fs::write for io-uring (#7786)

This commit is contained in:
vrtgs
2025-12-24 23:18:25 +08:00
committed by GitHub
parent 1b17a7e241
commit d666068be7
+8 -6
View File
@@ -72,12 +72,14 @@ async fn write_uring(path: &Path, mut buf: OwnedBuf) -> io::Result<()> {
let mut buf_offset: usize = 0;
let mut file_offset: u64 = 0;
while buf_offset < total {
let (n, _buf, _fd) = Op::write_at(fd, buf, buf_offset, file_offset)?.await;
// TODO: handle EINT here
let n = n?;
if n == 0 {
return Err(io::ErrorKind::WriteZero.into());
}
let (res, _buf, _fd) = Op::write_at(fd, buf, buf_offset, file_offset)?.await;
let n = match res {
Ok(0) => return Err(io::ErrorKind::WriteZero.into()),
Ok(n) => n,
Err(e) if e.kind() == io::ErrorKind::Interrupted => 0,
Err(e) => return Err(e),
};
buf = _buf;
fd = _fd;