struct llapi_resync_comp *comp_array,
int comp_size, uint64_t start, uint64_t end)
{
- size_t count;
+ uint64_t count;
size_t page_size = sysconf(_SC_PAGESIZE);
const size_t buflen = 4 << 20; /* 4M */
void *buf;
while (count > 0) {
uint32_t src;
uint64_t mirror_end = 0;
+ uint64_t bytes_left;
ssize_t bytes_read;
size_t to_read;
size_t to_write;
return -ENOENT;
if (mirror_end == OBD_OBJECT_EOF) {
- to_read = count;
+ bytes_left = count;
} else {
- to_read = MIN(count, mirror_end - pos);
- to_read = (to_read + page_size - 1) & ~(page_size - 1);
+ bytes_left = MIN(count, mirror_end - pos);
+ bytes_left = ((bytes_left - 1) | (page_size - 1)) + 1;
}
- to_read = MIN(buflen, to_read);
+ to_read = MIN(buflen, bytes_left);
bytes_read = llapi_mirror_read(fd, src, buf, to_read, pos);
if (bytes_read == 0) {
}
/* round up to page align to make direct IO happy. */
- to_write = (bytes_read + page_size - 1) & ~(page_size - 1);
+ to_write = ((bytes_read - 1) | (page_size - 1)) + 1;
for (i = 0; i < comp_size; i++) {
ssize_t written;