fiemap: fix fiemap size and log message when last extent

Fix the total fiemap struct plus extents size allocation.
Fix also the logging in IsLastExtent, that was printing error messages
every time.

Bug: none
Test: fiemap_*_test
Change-Id: I85c6af63ba3a75b993a5e8ad7d7170dc7af59582
Signed-off-by: Alessio Balsini <balsini@google.com>
This commit is contained in:
Alessio Balsini 2020-02-05 18:15:31 +00:00
parent e6211eb978
commit f6034544c0

View file

@ -526,11 +526,7 @@ static bool IsValidExtent(const fiemap_extent* extent, std::string_view file_pat
}
static bool IsLastExtent(const fiemap_extent* extent) {
if (!(extent->fe_flags & FIEMAP_EXTENT_LAST)) {
LOG(ERROR) << "Extents are being received out-of-order";
return false;
}
return true;
return !!(extent->fe_flags & FIEMAP_EXTENT_LAST);
}
static bool FiemapToExtents(struct fiemap* fiemap, std::vector<struct fiemap_extent>* extents,
@ -552,7 +548,10 @@ static bool FiemapToExtents(struct fiemap* fiemap, std::vector<struct fiemap_ext
fiemap_extent* next = &fiemap->fm_extents[i];
// Make sure extents are returned in order
if (next != last_extent && IsLastExtent(next)) return false;
if (next != last_extent && IsLastExtent(next)) {
LOG(ERROR) << "Extents are being received out-of-order";
return false;
}
// Check if extent's flags are valid
if (!IsValidExtent(next, file_path)) return false;
@ -592,8 +591,7 @@ static bool ReadFiemap(int file_fd, const std::string& file_path,
return false;
}
uint64_t fiemap_size =
sizeof(struct fiemap_extent) + num_extents * sizeof(struct fiemap_extent);
uint64_t fiemap_size = sizeof(struct fiemap) + num_extents * sizeof(struct fiemap_extent);
auto buffer = std::unique_ptr<void, decltype(&free)>(calloc(1, fiemap_size), free);
if (buffer == nullptr) {
LOG(ERROR) << "Failed to allocate memory for fiemap";