static inline
size_t remaining_mmap_bytes(struct ctf_fs_ds_file *ds_file)
{
- return ds_file->mmap_valid_len - ds_file->request_offset;
+ return ds_file->mmap_len - ds_file->request_offset;
}
static
}
if (bt_munmap(ds_file->mmap_addr, ds_file->mmap_len)) {
- BT_LOGE("Cannot memory-unmap address %p (size %zu) of file \"%s\" (%p): %s",
+ BT_LOGE_ERRNO("Cannot memory-unmap file",
+ ": address=%p, size=%zu, file_path=\"%s\", file=%p",
ds_file->mmap_addr, ds_file->mmap_len,
- ds_file->file->path->str, ds_file->file->fp,
- strerror(errno));
+ ds_file->file->path->str,
+ ds_file->file ? ds_file->file->fp : NULL);
ret = -1;
goto end;
}
goto error;
}
- ds_file->mmap_offset += ds_file->mmap_valid_len;
+ /*
+ * mmap_len is guaranteed to be page-aligned except on the
+ * last mapping where it may not be possible (since the file's
+ * size itself may not be a page multiple).
+ */
+ ds_file->mmap_offset += ds_file->mmap_len;
ds_file->request_offset = 0;
}
- ds_file->mmap_valid_len = MIN(ds_file->file->size - ds_file->mmap_offset,
+ ds_file->mmap_len = MIN(ds_file->file->size - ds_file->mmap_offset,
ds_file->mmap_max_len);
- if (ds_file->mmap_valid_len == 0) {
+ if (ds_file->mmap_len == 0) {
ret = BT_CTF_NOTIF_ITER_MEDIUM_STATUS_EOF;
goto end;
}
- /* Round up to next page, assuming page size being a power of 2. */
- ds_file->mmap_len = (ds_file->mmap_valid_len + page_size - 1)
- & ~(page_size - 1);
/* Map new region */
assert(ds_file->mmap_len);
ds_file->mmap_addr = bt_mmap((void *) 0, ds_file->mmap_len,