ivc->iov_len -= *offset;
ivc->iov_base += *offset;
}
- if (ivc->iov_len > size) {
+ if (ivc->iov_len >= size) {
ivc->iov_len = size;
if (i == 0)
*offset += size;
chunk = end - *ppos + 1;
if ((count == chunk) && (iov_offset == 0)) {
if (iov_copy)
- OBD_FREE(iov_copy, sizeof(iov) * nrsegs_orig);
+ OBD_FREE(iov_copy, sizeof(*iov) * nrsegs_orig);
iov_copy = (struct iovec *)iov;
nrsegs_copy = nr_segs;
} else {
if (!iov_copy) {
nrsegs_orig = nr_segs;
- OBD_ALLOC(iov_copy, sizeof(iov) * nr_segs);
+ OBD_ALLOC(iov_copy, sizeof(*iov) * nr_segs);
if (!iov_copy)
GOTO(out, retval = -ENOMEM);
}
iov_copy_update(&nr_segs, &iov, &nrsegs_copy, iov_copy,
&iov_offset, chunk);
}
-
} else {
end = *ppos + count - 1;
iov_copy = (struct iovec *)iov;
retval = (sum > 0) ? sum : retval;
if (iov_copy && iov_copy != iov)
- OBD_FREE(iov_copy, sizeof(iov) * nrsegs_orig);
+ OBD_FREE(iov_copy, sizeof(*iov) * nrsegs_orig);
RETURN(retval);
}
chunk = end - *ppos + 1;
if ((count == chunk) && (iov_offset == 0)) {
if (iov_copy)
- OBD_FREE(iov_copy, sizeof(iov) * nrsegs_orig);
+ OBD_FREE(iov_copy, sizeof(*iov) * nrsegs_orig);
iov_copy = (struct iovec *)iov;
nrsegs_copy = nr_segs;
} else {
if (!iov_copy) {
nrsegs_orig = nr_segs;
- OBD_ALLOC(iov_copy, sizeof(iov) * nr_segs);
+ OBD_ALLOC(iov_copy, sizeof(*iov) * nr_segs);
if (!iov_copy)
GOTO(out, retval = -ENOMEM);
}
-
iov_copy_update(&nr_segs, &iov, &nrsegs_copy, iov_copy,
&iov_offset, chunk);
}
up(&ll_i2info(inode)->lli_write_sem);
if (iov_copy && iov_copy != iov)
- OBD_FREE(iov_copy, sizeof(iov) * nrsegs_orig);
+ OBD_FREE(iov_copy, sizeof(*iov) * nrsegs_orig);
retval = (sum > 0) ? sum : retval;
ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_WRITE_BYTES,