From: Akanksha Mahajan Date: Thu, 7 Apr 2022 01:36:23 +0000 (-0700) Subject: Fix reseting of async_read_in_progress_ variable in FilePrefetchBuffer to call Poll... X-Git-Tag: v7.1.1~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=71158842aababb0477f708e7a62bd1d0ef804bbf;p=rocksdb.git Fix reseting of async_read_in_progress_ variable in FilePrefetchBuffer to call Poll API (#9815) Summary: Currently RocksDB reset async_read_in_progress_ in callback due to which underlying filesystem relying on Poll API won't be called leading to stale memory access. In order to fix it, async_read_in_progress_ will be reset after Poll API is called to make sure underlying file_system waiting on Poll can clear its state or take appropriate action. Pull Request resolved: https://github.com/facebook/rocksdb/pull/9815 Test Plan: CircleCI tests Reviewed By: anand1976 Differential Revision: D35451534 Pulled By: akankshamahajan15 fbshipit-source-id: b70ef6251a7aa9ed4876ba5e5100baa33d7d474c --- diff --git a/file/file_prefetch_buffer.cc b/file/file_prefetch_buffer.cc index ef349c2b8..1fce53b65 100644 --- a/file/file_prefetch_buffer.cc +++ b/file/file_prefetch_buffer.cc @@ -231,7 +231,10 @@ Status FilePrefetchBuffer::PrefetchAsync(const IOOptions& opts, handles.emplace_back(io_handle_); fs_->Poll(handles, 1).PermitUncheckedError(); } - // Release io_handle_ after the Poll API as request has been completed. + + // Reset and Release io_handle_ after the Poll API as request has been + // completed. + async_read_in_progress_ = false; if (io_handle_ != nullptr && del_fn_ != nullptr) { del_fn_(io_handle_); io_handle_ = nullptr; @@ -512,7 +515,6 @@ bool FilePrefetchBuffer::TryReadFromCacheAsync( void FilePrefetchBuffer::PrefetchAsyncCallback(const FSReadRequest& req, void* /*cb_arg*/) { - async_read_in_progress_ = false; uint32_t index = curr_ ^ 1; if (req.status.ok()) { if (req.offset + req.result.size() <=