- if (likely(pagecpy == len))
- lib_ring_buffer_do_copy(config,
- rpages->p[index].virt
- + (offset & ~PAGE_MASK),
- src, len);
- else
- _lib_ring_buffer_write(bufb, offset, src, len, 0);
+ /*
+ * Underlying layer should never ask for writes across
+ * subbuffers.
+ */
+ CHAN_WARN_ON(chanb, offset >= chanb->buf_size);
+ lib_ring_buffer_do_copy(config,
+ shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & (chanb->subbuf_size - 1)),
+ src, len);