Recent changes (master)
Jens Axboe <[email protected]> Tue, 25 Nov 2025 06:00:01 -0700
| Newsgroups | org.kernel.vger.fio |
|---|---|
| Message-ID | <[email protected]> |
The following changes since commit 7c8dbca4aa7ff0172d70846e04f8e9909ab81094:
ci: work around macOS pip restrictions (2025-11-18 20:15:42 -0500)
are available in the Git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to de3d5e68dd017a6d6099913b7831bb94f46e49cc:
Merge branch 'mmap-fixes' of https://github.com/geertj/fio (2025-11-24 06:50:27 -0700)
----------------------------------------------------------------
Geert Jansen (3):
engines/mmap: support fadvise_hint
engines/mmap: fix logic when "offset" > 0
engines/mmap: fix full/limited prep logic
Jens Axboe (1):
Merge branch 'mmap-fixes' of https://github.com/geertj/fio
engines/mmap.c | 41 +++++++++++++++++++++--------------------
1 file changed, 21 insertions(+), 20 deletions(-)
---
Diff of recent changes:
diff --git a/engines/mmap.c b/engines/mmap.c
index 55ba1ab3..1585d723 100644
--- a/engines/mmap.c
+++ b/engines/mmap.c
@@ -15,7 +15,7 @@
#include "../verify.h"
/*
- * Limits us to 1GiB of mapped files in total
+ * Limits us to 1GiB of mapped files in total on 32-bit architectures
*/
#define MMAP_TOTAL_SZ (1 * 1024 * 1024 * 1024UL)
@@ -53,6 +53,7 @@ static bool fio_madvise_file(struct thread_data *td, struct fio_file *f,
size_t length)
{
+ int flags;
struct fio_mmap_data *fmd = FILE_ENG_DATA(f);
#ifdef CONFIG_HAVE_THP
struct mmap_options *o = td->eo;
@@ -65,16 +66,20 @@ static bool fio_madvise_file(struct thread_data *td, struct fio_file *f,
if (!td->o.fadvise_hint)
return true;
- if (!td_random(td)) {
- if (posix_madvise(fmd->mmap_ptr, length, POSIX_MADV_SEQUENTIAL) < 0) {
- td_verror(td, errno, "madvise");
- return false;
- }
- } else {
- if (posix_madvise(fmd->mmap_ptr, length, POSIX_MADV_RANDOM) < 0) {
- td_verror(td, errno, "madvise");
- return false;
- }
+ if (td->o.fadvise_hint == F_ADV_TYPE)
+ flags = td_random(td) ? POSIX_MADV_RANDOM : POSIX_MADV_SEQUENTIAL;
+ else if (td->o.fadvise_hint == F_ADV_RANDOM)
+ flags = POSIX_MADV_RANDOM;
+ else if (td->o.fadvise_hint == F_ADV_SEQUENTIAL)
+ flags = POSIX_MADV_SEQUENTIAL;
+ else {
+ log_err("fio: unknown madvise type %d\n", td->o.fadvise_hint);
+ return false;
+ }
+
+ if (posix_madvise(fmd->mmap_ptr, length, flags) < 0) {
+ td_verror(td, errno, "madvise");
+ return false;
}
return true;
@@ -152,11 +157,8 @@ static int fio_mmapio_prep_limited(struct thread_data *td, struct io_u *io_u)
return EIO;
}
- fmd->mmap_sz = mmap_map_size;
- if (fmd->mmap_sz > f->io_size)
- fmd->mmap_sz = f->io_size;
-
fmd->mmap_off = io_u->offset;
+ fmd->mmap_sz = io_u->buflen;
return fio_mmap_file(td, f, fmd->mmap_sz, fmd->mmap_off);
}
@@ -172,14 +174,14 @@ static int fio_mmapio_prep_full(struct thread_data *td, struct io_u *io_u)
if (fio_file_partial_mmap(f))
return EINVAL;
- if (io_u->offset != (size_t) io_u->offset ||
- f->io_size != (size_t) f->io_size) {
+
+ if (sizeof(size_t) < 8 && f->io_size > mmap_map_size) {
fio_file_set_partial_mmap(f);
return EINVAL;
}
fmd->mmap_sz = f->io_size;
- fmd->mmap_off = 0;
+ fmd->mmap_off = f->file_offset;
ret = fio_mmap_file(td, f, fmd->mmap_sz, fmd->mmap_off);
if (ret)
@@ -218,8 +220,7 @@ static int fio_mmapio_prep(struct thread_data *td, struct io_u *io_u)
}
done:
- io_u->mmap_data = fmd->mmap_ptr + io_u->offset - fmd->mmap_off -
- f->file_offset;
+ io_u->mmap_data = fmd->mmap_ptr + io_u->offset - fmd->mmap_off;
return 0;
}