diff --git a/core/file.hh b/core/file.hh index b51bb49f97..67f72be78f 100644 --- a/core/file.hh +++ b/core/file.hh @@ -73,7 +73,7 @@ public: virtual future<> truncate(uint64_t length) = 0; virtual future<> discard(uint64_t offset, uint64_t length) = 0; virtual future<> allocate(uint64_t position, uint64_t length) = 0; - virtual future size(void) = 0; + virtual future size(void) = 0; virtual future<> close() = 0; virtual subscription list_directory(std::function (directory_entry de)> next) = 0; @@ -307,7 +307,7 @@ public: } /// Gets the file size. - future size() { + future size() { return _file_impl->size(); } diff --git a/core/reactor.cc b/core/reactor.cc index cd75bc75b0..a174abe425 100644 --- a/core/reactor.cc +++ b/core/reactor.cc @@ -706,13 +706,13 @@ blockdev_file_impl::allocate(uint64_t position, uint64_t length) { return make_ready_future<>(); } -future +future posix_file_impl::size(void) { auto r = ::lseek(_fd, 0, SEEK_END); if (r == -1) { - return make_exception_future(std::system_error(errno, std::system_category())); + return make_exception_future(std::system_error(errno, std::system_category())); } - return make_ready_future(r); + return make_ready_future(r); } future<> @@ -725,15 +725,15 @@ posix_file_impl::close() { }); } -future +future blockdev_file_impl::size(void) { return engine()._thread_pool.submit>([this] { - size_t size; + uint64_t size; int ret = ::ioctl(_fd, BLKGETSIZE64, &size); return wrap_syscall(ret, size); - }).then([] (syscall_result_extra ret) { + }).then([] (syscall_result_extra ret) { ret.throw_if_error(); - return make_ready_future(ret.extra); + return make_ready_future(ret.extra); }); }