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

Commit d78a3eda authored by Stefani Seibold's avatar Stefani Seibold Committed by Linus Torvalds
Browse files

kernel/kfifo.c: add handling of chained scatterlists



The current kfifo scatterlist implementation will not work with chained
scatterlists.  It assumes that struct scatterlist arrays are allocated
contiguously, which is not the case when chained scatterlists (struct
sg_table) are in use.

Signed-off-by: default avatarStefani Seibold <stefani@seibold.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5af568cb
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -333,17 +333,16 @@ static int setup_sgl_buf(struct scatterlist *sgl, void *buf,
		buf += PAGE_SIZE;
		npage = virt_to_page(buf);
		if (page_to_phys(page) != page_to_phys(npage) - l) {
			sgl->page_link = 0;
			sg_set_page(sgl++, page, l - off, off);
			if (++n == nents)
			sg_set_page(sgl, page, l - off, off);
			sgl = sg_next(sgl);
			if (++n == nents || sgl == NULL)
				return n;
			page = npage;
			len -= l - off;
			l = off = 0;
		}
	}
	sgl->page_link = 0;
	sg_set_page(sgl++, page, len, off);
	sg_set_page(sgl, page, len, off);
	return n + 1;
}