diff --git a/include/common/common_defs.hpp b/include/common/common_defs.hpp index c9d224387c4a1a88b6f6509a4dfda21929411ca2..e9e65a74812f60373a647e97a3b98e7ae9725ee0 100644 --- a/include/common/common_defs.hpp +++ b/include/common/common_defs.hpp @@ -66,4 +66,9 @@ constexpr auto na_sm = "na+sm"; } // namespace protocol } // namespace gkfs::rpc +namespace gkfs::config::syscall::stat { +// Number 512-byte blocks allocated as it is in the linux kernel (struct_stat.h) +constexpr auto st_nblocksize = 512; +} // namespace gkfs::config::syscall::stat + #endif // GEKKOFS_COMMON_DEFS_HPP diff --git a/src/client/preload_util.cpp b/src/client/preload_util.cpp index 2a77c37a36f2824f3f74b5bc73efbf55dd6247c3..0fdf59d3623e8716d5bc5568440354ae5a86a84b 100644 --- a/src/client/preload_util.cpp +++ b/src/client/preload_util.cpp @@ -268,9 +268,10 @@ metadata_to_stat(const std::string& path, const gkfs::metadata::Metadata& md, if(CTX->fs_conf()->link_cnt_state) { attr.st_nlink = md.link_count(); } - if(CTX->fs_conf()->blocks_state) { // last one will not encounter a - // delimiter anymore + if(CTX->fs_conf()->blocks_state) { attr.st_blocks = md.blocks(); + } else { + attr.st_blocks = md.size() / gkfs::config::syscall::stat::st_nblocksize; } return 0; }