Skip to content

Commit 2cce8b1

Browse files
committed
Add bool *map_sync argument to utils_mmap_file()
map_sync is set to true only if memory was mapped with MAP_SYNC, what means it is DAX. Signed-off-by: Lukasz Dorau <[email protected]>
1 parent d69a241 commit 2cce8b1

File tree

6 files changed

+25
-11
lines changed

6 files changed

+25
-11
lines changed

src/provider/provider_devdax_memory.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ static umf_result_t devdax_initialize(void *params, void **provider) {
143143
utils_translate_mem_visibility_flag(UMF_MEM_MAP_SYNC, &map_sync_flag);
144144

145145
// mmap /dev/dax with the MAP_SYNC xor MAP_SHARED flag (if MAP_SYNC fails)
146-
devdax_provider->base = utils_mmap_file(NULL, devdax_provider->size,
147-
devdax_provider->protection,
148-
map_sync_flag, fd, 0 /* offset */);
146+
devdax_provider->base = utils_mmap_file(
147+
NULL, devdax_provider->size, devdax_provider->protection, map_sync_flag,
148+
fd, 0 /* offset */, NULL);
149149
utils_close_fd(fd);
150150
if (devdax_provider->base == NULL) {
151151
LOG_PDEBUG("devdax memory mapping failed (path=%s, size=%zu)",
@@ -459,7 +459,7 @@ static umf_result_t devdax_open_ipc_handle(void *provider,
459459
// mmap /dev/dax with the MAP_SYNC xor MAP_SHARED flag (if MAP_SYNC fails)
460460
char *addr =
461461
utils_mmap_file(NULL, length_aligned, devdax_ipc_data->protection,
462-
map_sync_flag, fd, offset_aligned);
462+
map_sync_flag, fd, offset_aligned, NULL);
463463
if (addr == NULL) {
464464
devdax_store_last_native_error(UMF_DEVDAX_RESULT_ERROR_ALLOC_FAILED,
465465
errno);

src/provider/provider_file_memory.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ static umf_result_t file_mmap_aligned(file_memory_provider_t *file_provider,
293293
ASSERT_IS_ALIGNED(extended_size, page_size);
294294
ASSERT_IS_ALIGNED(aligned_offset_fd, page_size);
295295

296-
void *ptr =
297-
utils_mmap_file(NULL, extended_size, prot, flag, fd, aligned_offset_fd);
296+
void *ptr = utils_mmap_file(NULL, extended_size, prot, flag, fd,
297+
aligned_offset_fd, NULL);
298298
if (ptr == NULL) {
299299
LOG_PERR("memory mapping failed");
300300
return UMF_RESULT_ERROR_MEMORY_PROVIDER_SPECIFIC;
@@ -683,7 +683,7 @@ static umf_result_t file_open_ipc_handle(void *provider, void *providerIpcData,
683683

684684
char *addr = utils_mmap_file(
685685
NULL, file_ipc_data->size, file_ipc_data->protection,
686-
file_ipc_data->visibility, fd, file_ipc_data->offset_fd);
686+
file_ipc_data->visibility, fd, file_ipc_data->offset_fd, NULL);
687687
(void)utils_close_fd(fd);
688688
if (addr == NULL) {
689689
file_store_last_native_error(UMF_FILE_RESULT_ERROR_ALLOC_FAILED, errno);

src/utils/utils_common.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#define UMF_COMMON_H 1
1212

1313
#include <assert.h>
14+
#include <stdbool.h>
1415
#include <stddef.h>
1516
#include <stdint.h>
1617

@@ -132,7 +133,7 @@ void *utils_mmap(void *hint_addr, size_t length, int prot, int flag, int fd,
132133
size_t fd_offset);
133134

134135
void *utils_mmap_file(void *hint_addr, size_t length, int prot, int flags,
135-
int fd, size_t fd_offset);
136+
int fd, size_t fd_offset, bool *map_sync);
136137

137138
int utils_munmap(void *addr, size_t length);
138139

src/utils/utils_linux_common.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include <errno.h>
1111
#include <fcntl.h>
12+
#include <stdbool.h>
1213
#include <sys/mman.h>
1314
#include <sys/stat.h>
1415
#include <sys/syscall.h>
@@ -46,9 +47,13 @@ utils_translate_mem_visibility_flag(umf_memory_visibility_t in_flag,
4647
* did not specify it by himself it tries to mmap with (flags | MAP_SHARED).
4748
*/
4849
void *utils_mmap_file(void *hint_addr, size_t length, int prot, int flags,
49-
int fd, size_t fd_offset) {
50+
int fd, size_t fd_offset, bool *map_sync) {
5051
void *addr;
5152

53+
if (map_sync) {
54+
*map_sync = false;
55+
}
56+
5257
/*
5358
* MAP_PRIVATE and MAP_SHARED are mutually exclusive,
5459
* therefore mmap with MAP_PRIVATE is executed separately.
@@ -80,6 +85,11 @@ void *utils_mmap_file(void *hint_addr, size_t length, int prot, int flags,
8085
LOG_DEBUG("file mapped with the MAP_SYNC flag (fd=%i, offset=%zu, "
8186
"length=%zu)",
8287
fd, fd_offset, length);
88+
89+
if (map_sync) {
90+
*map_sync = true;
91+
}
92+
8393
return addr;
8494
}
8595

src/utils/utils_macosx_common.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <umf/base.h>
1313
#include <umf/memory_provider.h>
1414

15+
#include "utils_common.h"
1516
#include "utils_log.h"
1617

1718
umf_result_t
@@ -30,13 +31,14 @@ utils_translate_mem_visibility_flag(umf_memory_visibility_t in_flag,
3031
}
3132

3233
void *utils_mmap_file(void *hint_addr, size_t length, int prot, int flags,
33-
int fd, size_t fd_offset) {
34+
int fd, size_t fd_offset, bool *map_sync) {
3435
(void)hint_addr; // unused
3536
(void)length; // unused
3637
(void)prot; // unused
3738
(void)flags; // unused
3839
(void)fd; // unused
3940
(void)fd_offset; // unused
41+
(void)map_sync; // unused
4042
return NULL; // not supported
4143
}
4244

src/utils/utils_windows_common.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,14 @@ void *utils_mmap(void *hint_addr, size_t length, int prot, int flag, int fd,
148148
}
149149

150150
void *utils_mmap_file(void *hint_addr, size_t length, int prot, int flags,
151-
int fd, size_t fd_offset) {
151+
int fd, size_t fd_offset, bool *map_sync) {
152152
(void)hint_addr; // unused
153153
(void)length; // unused
154154
(void)prot; // unused
155155
(void)flags; // unused
156156
(void)fd; // unused
157157
(void)fd_offset; // unused
158+
(void)map_sync; // unused
158159
return NULL; // not supported
159160
}
160161

0 commit comments

Comments
 (0)