mirror of https://github.com/schoebel/mars
copy: fix COPY_CHUNK border crossing
This commit is contained in:
parent
1932198fd9
commit
b6a5ee3227
|
@ -324,6 +324,7 @@ int _make_mref(struct copy_brick *brick,
|
||||||
const unsigned queue = _queue;
|
const unsigned queue = _queue;
|
||||||
unsigned input_index;
|
unsigned input_index;
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
|
unsigned max_len;
|
||||||
unsigned len;
|
unsigned len;
|
||||||
int status = -EAGAIN;
|
int status = -EAGAIN;
|
||||||
|
|
||||||
|
@ -393,12 +394,13 @@ int _make_mref(struct copy_brick *brick,
|
||||||
mref->ref_data = data;
|
mref->ref_data = data;
|
||||||
mref->ref_pos = current_pos;
|
mref->ref_pos = current_pos;
|
||||||
offset = GET_OFFSET(current_pos);
|
offset = GET_OFFSET(current_pos);
|
||||||
len = COPY_CHUNK - offset;
|
max_len = COPY_CHUNK - offset;
|
||||||
if (current_pos + len > end_pos) {
|
/* higher end values than 2GiB may occur at big devices */
|
||||||
unsigned new_len = end_pos - current_pos;
|
if (diff > COPY_CHUNK)
|
||||||
|
diff = COPY_CHUNK;
|
||||||
if (new_len < len)
|
len = diff;
|
||||||
len = new_len;
|
if (len > max_len) {
|
||||||
|
len = max_len;
|
||||||
}
|
}
|
||||||
mref->ref_len = len;
|
mref->ref_len = len;
|
||||||
mref->ref_prio = (flags & MREF_WRITE) ?
|
mref->ref_prio = (flags & MREF_WRITE) ?
|
||||||
|
|
Loading…
Reference in New Issue