mirror of
https://gitflic.ru/project/erthink/libmdbx.git
synced 2025-02-11 09:45:52 +00:00
mdbx: always setup madvise while opening DB.
This partially revert 7da64b725d
.
Hope fix https://github.com/erthink/libmdbx/issues/231
This commit is contained in:
parent
217e951e68
commit
d2cba98f70
83
src/core.c
83
src/core.c
@ -11837,59 +11837,58 @@ __cold static int mdbx_setup_dxb(MDBX_env *env, const int lck_rc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------- setup madvise/readahead
|
|
||||||
atomic_store32(&env->me_lck->mti_discarded_tail,
|
atomic_store32(&env->me_lck->mti_discarded_tail,
|
||||||
bytes2pgno(env, used_aligned2os_bytes), mo_Relaxed);
|
bytes2pgno(env, used_aligned2os_bytes), mo_Relaxed);
|
||||||
|
} /* lck exclusive, lck_rc == MDBX_RESULT_TRUE */
|
||||||
|
|
||||||
|
//---------------------------------------------------- setup madvise/readahead
|
||||||
#if MDBX_ENABLE_MADVISE
|
#if MDBX_ENABLE_MADVISE
|
||||||
if (used_aligned2os_bytes < env->me_dxb_mmap.current) {
|
if (used_aligned2os_bytes < env->me_dxb_mmap.current) {
|
||||||
#if defined(MADV_REMOVE)
|
#if defined(MADV_REMOVE)
|
||||||
if ((env->me_flags & MDBX_WRITEMAP) != 0 &&
|
if (lck_rc && (env->me_flags & MDBX_WRITEMAP) != 0 &&
|
||||||
/* not recovery mode */ env->me_stuck_meta < 0) {
|
/* not recovery mode */ env->me_stuck_meta < 0) {
|
||||||
mdbx_notice("open-MADV_%s %u..%u", "REMOVE (deallocate file space)",
|
mdbx_notice("open-MADV_%s %u..%u", "REMOVE (deallocate file space)",
|
||||||
env->me_lck->mti_discarded_tail.weak,
|
|
||||||
bytes2pgno(env, env->me_dxb_mmap.current));
|
|
||||||
err = madvise(env->me_map + used_aligned2os_bytes,
|
|
||||||
env->me_dxb_mmap.current - used_aligned2os_bytes,
|
|
||||||
MADV_REMOVE)
|
|
||||||
? ignore_enosys(errno)
|
|
||||||
: MDBX_SUCCESS;
|
|
||||||
if (unlikely(MDBX_IS_ERROR(err)))
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
#endif /* MADV_REMOVE */
|
|
||||||
#if defined(MADV_DONTNEED)
|
|
||||||
mdbx_notice("open-MADV_%s %u..%u", "DONTNEED",
|
|
||||||
env->me_lck->mti_discarded_tail.weak,
|
env->me_lck->mti_discarded_tail.weak,
|
||||||
bytes2pgno(env, env->me_dxb_mmap.current));
|
bytes2pgno(env, env->me_dxb_mmap.current));
|
||||||
err = madvise(env->me_map + used_aligned2os_bytes,
|
err =
|
||||||
env->me_dxb_mmap.current - used_aligned2os_bytes,
|
madvise(env->me_map + used_aligned2os_bytes,
|
||||||
MADV_DONTNEED)
|
env->me_dxb_mmap.current - used_aligned2os_bytes, MADV_REMOVE)
|
||||||
? ignore_enosys(errno)
|
? ignore_enosys(errno)
|
||||||
: MDBX_SUCCESS;
|
: MDBX_SUCCESS;
|
||||||
if (unlikely(MDBX_IS_ERROR(err)))
|
if (unlikely(MDBX_IS_ERROR(err)))
|
||||||
return err;
|
return err;
|
||||||
#elif defined(POSIX_MADV_DONTNEED)
|
|
||||||
err = ignore_enosys(
|
|
||||||
posix_madvise(env->me_map + used_aligned2os_bytes,
|
|
||||||
env->me_dxb_mmap.current - used_aligned2os_bytes,
|
|
||||||
POSIX_MADV_DONTNEED));
|
|
||||||
if (unlikely(MDBX_IS_ERROR(err)))
|
|
||||||
return err;
|
|
||||||
#elif defined(POSIX_FADV_DONTNEED)
|
|
||||||
err = ignore_enosys(
|
|
||||||
posix_fadvise(env->me_lazy_fd, used_aligned2os_bytes,
|
|
||||||
env->me_dxb_mmap.current - used_aligned2os_bytes,
|
|
||||||
POSIX_FADV_DONTNEED));
|
|
||||||
if (unlikely(MDBX_IS_ERROR(err)))
|
|
||||||
return err;
|
|
||||||
#endif /* MADV_DONTNEED */
|
|
||||||
}
|
}
|
||||||
|
#endif /* MADV_REMOVE */
|
||||||
err = mdbx_set_readahead(env, bytes2pgno(env, used_bytes), readahead, true);
|
#if defined(MADV_DONTNEED)
|
||||||
if (unlikely(err != MDBX_SUCCESS))
|
mdbx_notice("open-MADV_%s %u..%u", "DONTNEED",
|
||||||
|
env->me_lck->mti_discarded_tail.weak,
|
||||||
|
bytes2pgno(env, env->me_dxb_mmap.current));
|
||||||
|
err =
|
||||||
|
madvise(env->me_map + used_aligned2os_bytes,
|
||||||
|
env->me_dxb_mmap.current - used_aligned2os_bytes, MADV_DONTNEED)
|
||||||
|
? ignore_enosys(errno)
|
||||||
|
: MDBX_SUCCESS;
|
||||||
|
if (unlikely(MDBX_IS_ERROR(err)))
|
||||||
return err;
|
return err;
|
||||||
|
#elif defined(POSIX_MADV_DONTNEED)
|
||||||
|
err = ignore_enosys(posix_madvise(
|
||||||
|
env->me_map + used_aligned2os_bytes,
|
||||||
|
env->me_dxb_mmap.current - used_aligned2os_bytes, POSIX_MADV_DONTNEED));
|
||||||
|
if (unlikely(MDBX_IS_ERROR(err)))
|
||||||
|
return err;
|
||||||
|
#elif defined(POSIX_FADV_DONTNEED)
|
||||||
|
err = ignore_enosys(posix_fadvise(
|
||||||
|
env->me_lazy_fd, used_aligned2os_bytes,
|
||||||
|
env->me_dxb_mmap.current - used_aligned2os_bytes, POSIX_FADV_DONTNEED));
|
||||||
|
if (unlikely(MDBX_IS_ERROR(err)))
|
||||||
|
return err;
|
||||||
|
#endif /* MADV_DONTNEED */
|
||||||
|
}
|
||||||
|
|
||||||
|
err = mdbx_set_readahead(env, bytes2pgno(env, used_bytes), readahead, true);
|
||||||
|
if (unlikely(err != MDBX_SUCCESS))
|
||||||
|
return err;
|
||||||
#endif /* MDBX_ENABLE_MADVISE */
|
#endif /* MDBX_ENABLE_MADVISE */
|
||||||
} /* lck exclusive, lck_rc == MDBX_RESULT_TRUE */
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user