|
|
@@ -652,17 +652,18 @@ static bool sg_miter_get_next_page(struct sg_mapping_iter *miter)
|
|
|
{
|
|
|
if (!miter->__remaining) {
|
|
|
struct scatterlist *sg;
|
|
|
- unsigned long pgoffset;
|
|
|
|
|
|
if (!__sg_page_iter_next(&miter->piter))
|
|
|
return false;
|
|
|
|
|
|
sg = miter->piter.sg;
|
|
|
- pgoffset = miter->piter.sg_pgoffset;
|
|
|
|
|
|
- miter->__offset = pgoffset ? 0 : sg->offset;
|
|
|
+ miter->__offset = miter->piter.sg_pgoffset ? 0 : sg->offset;
|
|
|
+ miter->piter.sg_pgoffset += miter->__offset >> PAGE_SHIFT;
|
|
|
+ miter->__offset &= PAGE_SIZE - 1;
|
|
|
miter->__remaining = sg->offset + sg->length -
|
|
|
- (pgoffset << PAGE_SHIFT) - miter->__offset;
|
|
|
+ (miter->piter.sg_pgoffset << PAGE_SHIFT) -
|
|
|
+ miter->__offset;
|
|
|
miter->__remaining = min_t(unsigned long, miter->__remaining,
|
|
|
PAGE_SIZE - miter->__offset);
|
|
|
}
|