@@ -373,6 +373,7 @@ typedef struct devdax_ipc_data_t {
373373 size_t size ; // size of the /dev/dax
374374 unsigned protection ; // combination of OS-specific memory protection flags
375375 size_t offset ; // offset of the data
376+ size_t length ; // length of the data
376377} devdax_ipc_data_t ;
377378
378379static umf_result_t devdax_get_ipc_handle_size (void * provider , size_t * size ) {
@@ -397,12 +398,13 @@ static umf_result_t devdax_get_ipc_handle(void *provider, const void *ptr,
397398 (devdax_memory_provider_t * )provider ;
398399
399400 devdax_ipc_data_t * devdax_ipc_data = (devdax_ipc_data_t * )providerIpcData ;
400- devdax_ipc_data -> offset =
401- (size_t )((uintptr_t )ptr - (uintptr_t )devdax_provider -> base );
402401 strncpy (devdax_ipc_data -> path , devdax_provider -> path , PATH_MAX - 1 );
403402 devdax_ipc_data -> path [PATH_MAX - 1 ] = '\0' ;
404403 devdax_ipc_data -> size = devdax_provider -> size ;
405404 devdax_ipc_data -> protection = devdax_provider -> protection ;
405+ devdax_ipc_data -> offset =
406+ (size_t )((uintptr_t )ptr - (uintptr_t )devdax_provider -> base );
407+ devdax_ipc_data -> length = size ;
406408
407409 return UMF_RESULT_SUCCESS ;
408410}
@@ -453,27 +455,27 @@ static umf_result_t devdax_open_ipc_handle(void *provider,
453455 utils_translate_mem_visibility_flag (UMF_MEM_MAP_SYNC , & map_sync_flag );
454456
455457 // mmap /dev/dax with the MAP_SYNC xor MAP_SHARED flag (if MAP_SYNC fails)
456- char * base = utils_mmap_file (NULL , devdax_ipc_data -> size ,
458+ char * addr = utils_mmap_file (NULL , devdax_ipc_data -> length ,
457459 devdax_ipc_data -> protection , map_sync_flag , fd ,
458- 0 /* offset */ );
459- if (base == NULL ) {
460+ devdax_ipc_data -> offset );
461+ if (addr == NULL ) {
460462 devdax_store_last_native_error (UMF_DEVDAX_RESULT_ERROR_ALLOC_FAILED ,
461463 errno );
462464 LOG_PERR ("devdax mapping failed (path: %s, size: %zu, protection: %i, "
463- "fd: %i)" ,
464- devdax_ipc_data -> path , devdax_ipc_data -> size ,
465- devdax_ipc_data -> protection , fd );
465+ "fd: %i, offset: %zu )" ,
466+ devdax_ipc_data -> path , devdax_ipc_data -> length ,
467+ devdax_ipc_data -> protection , fd , devdax_ipc_data -> offset );
466468 ret = UMF_RESULT_ERROR_MEMORY_PROVIDER_SPECIFIC ;
467469 }
468470
469471 LOG_DEBUG ("devdax mapped (path: %s, size: %zu, protection: %i, fd: %i, "
470472 "offset: %zu)" ,
471- devdax_ipc_data -> path , devdax_ipc_data -> size ,
473+ devdax_ipc_data -> path , devdax_ipc_data -> length ,
472474 devdax_ipc_data -> protection , fd , devdax_ipc_data -> offset );
473475
474476 (void )utils_close_fd (fd );
475477
476- * ptr = base + devdax_ipc_data -> offset ;
478+ * ptr = addr ;
477479
478480 return ret ;
479481}
@@ -484,11 +486,8 @@ static umf_result_t devdax_close_ipc_handle(void *provider, void *ptr,
484486 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
485487 }
486488
487- devdax_memory_provider_t * devdax_provider =
488- (devdax_memory_provider_t * )provider ;
489-
490489 errno = 0 ;
491- int ret = utils_munmap (devdax_provider -> base , devdax_provider -> size );
490+ int ret = utils_munmap (ptr , size );
492491 // ignore error when size == 0
493492 if (ret && (size > 0 )) {
494493 devdax_store_last_native_error (UMF_DEVDAX_RESULT_ERROR_FREE_FAILED ,
0 commit comments