Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a316b79c authored by Erez Zilber's avatar Erez Zilber Committed by Roland Dreier
Browse files

IB/iser: Add missing counter increment in iser_data_buf_aligned_len()



While adding sg chaining support to iSER, a "for" loop was replaced
with a "for_each_sg" loop. The "for" loop included the incrementation
of 2 variables. Only one of them is incremented in the current
"for_each_sg" loop. This caused iSER to think that all data is
unaligned, and all data was copied to aligned buffers.

This patch increments the missing counter inside the "for_each_sg"
loop whenever necessary.

Signed-off-by: default avatarErez Zilber <erezz@voltaire.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 3fe2ed34
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -310,13 +310,15 @@ static unsigned int iser_data_buf_aligned_len(struct iser_data_buf *data,
		if (i + 1 < data->dma_nents) {
			next_addr = ib_sg_dma_address(ibdev, sg_next(sg));
			/* are i, i+1 fragments of the same page? */
			if (end_addr == next_addr)
			if (end_addr == next_addr) {
				cnt++;
				continue;
			else if (!IS_4K_ALIGNED(end_addr)) {
			} else if (!IS_4K_ALIGNED(end_addr)) {
				ret_len = cnt + 1;
				break;
			}
		}
		cnt++;
	}
	if (i == data->dma_nents)
		ret_len = cnt;	/* loop ended */