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: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
Tejun Heo 2009-04-15 22:10:23 +09:00 коммит произвёл Jens Axboe
Родитель 0910697403
Коммит 23c560a99d
1 изменённых файлов: 6 добавлений и 3 удалений

Просмотреть файл

@ -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 */