Skip to content

Commit

Permalink
Make linux file write life time hinting work (#12595)
Browse files Browse the repository at this point in the history
Summary:
The life time hint fcntl takes a 64-bit unsigned int, so make sure to pass a uint64_t when doing the syscall.

See:

https://man7.org/linux/man-pages/man2/fcntl.2.html
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c75b1d9421f80f4143e389d2d50ddfc8a28c8c35

This is one of those "How did this ever work?", as Env::WriteLifeTimeHint hint is definitely not the same as an 64-bit unsigned int.
What's surprising is that SetWriteLifeTimeHint does pass a valid hint from time to time.

Thanks,
Hans

Pull Request resolved: #12595

Reviewed By: cbi42

Differential Revision: D56901280

Pulled By: ajkr

fbshipit-source-id: f276348863cbc29a537bed9450b16b0cc513ea78
  • Loading branch information
yhr authored and facebook-github-bot committed May 8, 2024
1 parent 5bf2c00 commit b8400c9
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion env/io_posix.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1441,10 +1441,12 @@ void PosixWritableFile::SetWriteLifeTimeHint(Env::WriteLifeTimeHint hint) {
#ifdef OS_LINUX
// Suppress Valgrind "Unimplemented functionality" error.
#ifndef ROCKSDB_VALGRIND_RUN
uint64_t fcntl_hint = hint;

if (hint == write_hint_) {
return;
}
if (fcntl(fd_, F_SET_RW_HINT, &hint) == 0) {
if (fcntl(fd_, F_SET_RW_HINT, &fcntl_hint) == 0) {
write_hint_ = hint;
}
#else
Expand Down

0 comments on commit b8400c9

Please sign in to comment.