> How about the patch below ?
The patch looks good to me, but while we touch this area, how about
throwing in a few cosmetic fixes as well?
> - if (i && page_addr != dma_addr) {
> + if (i && (page_addr != dma_addr || last_page_off != 0)) {
> if (last_end_dma_addr != dma_addr) {
Wo about we one or two sentences for each of the conditions here?
> /* gap */
> - goto done;
> -
> + break;
> } else if (last_page_off + dma_len <= mr->page_size) {
> /* chunk this fragment with the last */
> mr->length += dma_len;
It would be great to avoid the else clauses if we already to a
break/continue/goto to make the code flow more clear, e.g.
/*
* Gap to the previous segment, we'll need to return
* and use another FR to map the reminder.
*/
if (last_end_dma_addr != dma_addr)
break;
/*
* See if this segment is contiguous to the
* previous one and just merge it in that case.
*/
if (last_page_off + dma_len <= mr->page_size) {
last_end_dma_addr += dma_len;
last_page_off += dma_len;
mr->length += dma_len;
continue;
}
/*
* New page-aligned segment to map:
*/
page_addr = last_page_addr + mr->page_size;
dma_len -= mr->page_size - last_page_off;
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html