Skip to content

Commit

Permalink
file: Don't return chain of ready futures from make_file_impl
Browse files Browse the repository at this point in the history
The most common execution path for this helper is to return a single
ready future with file impl. However, to facilitate the fs_info getting
it creates a chain of two ready futures. Make things simpler.

Signed-off-by: Pavel Emelyanov <[email protected]>
  • Loading branch information
xemul committed Jun 18, 2024
1 parent 53e33e0 commit 55ab876
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/core/file.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1078,8 +1078,8 @@ make_file_impl(int fd, file_open_options options, int flags, struct stat st) noe
auto st_dev = st.st_dev;
static thread_local std::unordered_map<decltype(st_dev), internal::fs_info> s_fstype;

future<> get_fs_info = s_fstype.count(st_dev) ? make_ready_future<>() :
engine().fstatfs(fd).then([fd, st_dev] (struct statfs sfs) {
if (s_fstype.count(st_dev) == 0) {
return engine().fstatfs(fd).then([fd, options = std::move(options), flags, st = std::move(st)] (struct statfs sfs) {
internal::fs_info fsi;
fsi.block_size = sfs.f_bsize;
switch (sfs.f_type) {
Expand Down Expand Up @@ -1126,15 +1126,17 @@ make_file_impl(int fd, file_open_options options, int flags, struct stat st) noe
fsi.fsync_is_exclusive = true;
fsi.nowait_works = false;
}
auto st_dev = st.st_dev;
s_fstype[st_dev] = std::move(fsi);
return make_file_impl(fd, std::move(options), flags, std::move(st));
});
return get_fs_info.then([st_dev, fd, flags, options = std::move(options)] () mutable {
}

const internal::fs_info& fsi = s_fstype[st_dev];
if (!fsi.append_challenged || options.append_is_unlikely || ((flags & O_ACCMODE) == O_RDONLY)) {
return make_ready_future<shared_ptr<file_impl>>(make_shared<posix_file_real_impl>(fd, open_flags(flags), std::move(options), fsi, st_dev));
}
return make_ready_future<shared_ptr<file_impl>>(make_shared<append_challenged_posix_file_impl>(fd, open_flags(flags), std::move(options), fsi, st_dev));
});
}

file::file(seastar::file_handle&& handle) noexcept
Expand Down

0 comments on commit 55ab876

Please sign in to comment.