Commit 23c560a9 authored by Tejun Heo's avatar Tejun Heo Committed by Jens Axboe

scatterlist: make sure sg_miter_next() doesn't return 0 sized mappings

Impact: fix not-so-critical but annoying bug

sg_miter_next() returns 0 sized mapping if there is an zero sized sg
entry in the list or at the end of each iteration.  As the users
always check the ->length field, this bug shouldn't be critical other
than causing unnecessary iteration.

Fix it.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 09106974
...@@ -347,9 +347,12 @@ bool sg_miter_next(struct sg_mapping_iter *miter) ...@@ -347,9 +347,12 @@ bool sg_miter_next(struct sg_mapping_iter *miter)
sg_miter_stop(miter); sg_miter_stop(miter);
/* get to the next sg if necessary. __offset is adjusted by stop */ /* get to the next sg if necessary. __offset is adjusted by stop */
if (miter->__offset == miter->__sg->length && --miter->__nents) { while (miter->__offset == miter->__sg->length) {
if (--miter->__nents) {
miter->__sg = sg_next(miter->__sg); miter->__sg = sg_next(miter->__sg);
miter->__offset = 0; miter->__offset = 0;
} else
return false;
} }
/* map the next page */ /* map the next page */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment