mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-30 09:22:06 +08:00
mdbx: always setup madvise while opening DB.
This partially revert 7da64b725d920b1602ec0d307581a6cdca997d05. 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,
|
||||
bytes2pgno(env, used_aligned2os_bytes), mo_Relaxed);
|
||||
} /* lck exclusive, lck_rc == MDBX_RESULT_TRUE */
|
||||
|
||||
//---------------------------------------------------- setup madvise/readahead
|
||||
#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 ((env->me_flags & MDBX_WRITEMAP) != 0 &&
|
||||
/* not recovery mode */ env->me_stuck_meta < 0) {
|
||||
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",
|
||||
if (lck_rc && (env->me_flags & MDBX_WRITEMAP) != 0 &&
|
||||
/* not recovery mode */ env->me_stuck_meta < 0) {
|
||||
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_DONTNEED)
|
||||
? ignore_enosys(errno)
|
||||
: MDBX_SUCCESS;
|
||||
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;
|
||||
#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))
|
||||
#endif /* MADV_REMOVE */
|
||||
#if defined(MADV_DONTNEED)
|
||||
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;
|
||||
#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 */
|
||||
} /* lck exclusive, lck_rc == MDBX_RESULT_TRUE */
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user