free(buf);
}
-static size_t add_tids(unsigned int *ids, size_t count, char *arg)
+static size_t add_tids(__u16 *ids, size_t count, char *arg)
{
while (*arg) {
char *end;
int c;
int i;
- unsigned int ids[4096] = { 0 };
+ __u16 ids[4096] = { 0 };
size_t count = 0;
ssize_t result;
return -1;
}
+ssize_t mirror_resync_one(int fd, struct llapi_layout *layout,
+ uint32_t dst, uint64_t start, uint64_t end)
+{
+ uint64_t mirror_end = 0;
+ ssize_t result = 0;
+ uint64_t count;
+
+ if (end == OBD_OBJECT_EOF)
+ count = OBD_OBJECT_EOF;
+ else
+ count = end - start;
+
+ while (count > 0) {
+ uint32_t src;
+ uint64_t to_copy;
+ ssize_t copied;
+
+ src = llapi_mirror_find(layout, start, end, &mirror_end);
+ if (src == 0)
+ return -ENOENT;
+
+ if (mirror_end == OBD_OBJECT_EOF)
+ to_copy = count;
+ else
+ to_copy = MIN(count, mirror_end - start);
+
+ copied = llapi_mirror_copy(fd, src, dst, start, to_copy);
+ if (copied < 0)
+ return copied;
+
+ result += copied;
+ if (copied < to_copy) /* end of file */
+ break;
+
+ if (count != OBD_OBJECT_EOF)
+ count -= copied;
+ start += copied;
+ }
+
+ return result;
+}
+
static void mirror_resync(int argc, char *argv[])
{
const char *fname;
}
printf("\b\n");
- res = llapi_mirror_resync_one(fd, layout, mirror_id,
- comp_array[idx].lrc_start, end);
+ res = mirror_resync_one(fd, layout, mirror_id,
+ comp_array[idx].lrc_start, end);
if (res > 0) {
int j;