Skip to content

Commit c2b5429

Browse files
fix: use compile-time cfg for platform-specific DMA flags (#18846)
* fix: use compile-time cfg for platform-specific DMA flags * update --------- Co-authored-by: coldWater <forsaken628@gmail.com>
1 parent c291ba4 commit c2b5429

File tree

1 file changed

+22
-23
lines changed
  • src/common/base/src/base

1 file changed

+22
-23
lines changed

src/common/base/src/base/dma.rs

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -305,12 +305,7 @@ pub type AsyncDmaFile = DmaFile<AsyncFile>;
305305

306306
impl AsyncDmaFile {
307307
async fn open_fd(path: impl AsRef<Path>, dio: bool) -> io::Result<AsyncFile> {
308-
let flags = if cfg!(target_os = "linux") && dio {
309-
OFlags::DIRECT.bits() as i32
310-
} else {
311-
0
312-
};
313-
308+
let flags = flags_direct_or_empty(dio).bits() as i32;
314309
AsyncFile::options()
315310
.read(true)
316311
.custom_flags(flags)
@@ -319,12 +314,7 @@ impl AsyncDmaFile {
319314
}
320315

321316
async fn create_fd(path: impl AsRef<Path>, dio: bool) -> io::Result<AsyncFile> {
322-
let flags = if cfg!(target_os = "linux") && dio {
323-
OFlags::EXCL | OFlags::DIRECT
324-
} else {
325-
OFlags::EXCL
326-
};
327-
317+
let flags = flags_direct_or_empty(dio) | OFlags::EXCL;
328318
AsyncFile::options()
329319
.write(true)
330320
.create(true)
@@ -421,25 +411,34 @@ impl AsyncDmaFile {
421411
}
422412
}
423413

414+
#[cfg(target_os = "linux")]
415+
fn flags_direct_or_empty(dio: bool) -> OFlags {
416+
if dio {
417+
OFlags::DIRECT
418+
} else {
419+
OFlags::empty()
420+
}
421+
}
422+
423+
#[cfg(not(target_os = "linux"))]
424+
fn flags_direct_or_empty(_dio: bool) -> OFlags {
425+
OFlags::empty()
426+
}
427+
424428
pub type SyncDmaFile = DmaFile<OwnedFd>;
425429

426430
impl SyncDmaFile {
427431
fn open_fd(path: impl rustix::path::Arg, dio: bool) -> io::Result<OwnedFd> {
428-
let flags = if cfg!(target_os = "linux") && dio {
429-
OFlags::RDONLY | OFlags::DIRECT
430-
} else {
431-
OFlags::RDONLY
432-
};
432+
let flags = OFlags::RDONLY | flags_direct_or_empty(dio);
433433
rustix::fs::open(path, flags, rustix::fs::Mode::empty()).map_err(io::Error::from)
434434
}
435435

436436
fn create_fd(path: impl rustix::path::Arg, dio: bool) -> io::Result<OwnedFd> {
437-
let flags = if cfg!(target_os = "linux") && dio {
438-
OFlags::EXCL | OFlags::CREATE | OFlags::TRUNC | OFlags::WRONLY | OFlags::DIRECT
439-
} else {
440-
OFlags::EXCL | OFlags::CREATE | OFlags::TRUNC | OFlags::WRONLY
441-
};
442-
437+
let flags = OFlags::EXCL
438+
| OFlags::CREATE
439+
| OFlags::TRUNC
440+
| OFlags::WRONLY
441+
| flags_direct_or_empty(dio);
443442
rustix::fs::open(path, flags, rustix::fs::Mode::from_raw_mode(0o666))
444443
.map_err(io::Error::from)
445444
}

0 commit comments

Comments
 (0)