diff options
-rw-r--r-- | kernel/kfifo.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/kernel/kfifo.c b/kernel/kfifo.c index 02192dd905cc..4502604ecadf 100644 --- a/kernel/kfifo.c +++ b/kernel/kfifo.c | |||
@@ -10,7 +10,7 @@ | |||
10 | * | 10 | * |
11 | * This program is distributed in the hope that it will be useful, | 11 | * This program is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | * GNU General Public License for more details. | 14 | * GNU General Public License for more details. |
15 | * | 15 | * |
16 | * You should have received a copy of the GNU General Public License | 16 | * You should have received a copy of the GNU General Public License |
@@ -333,17 +333,16 @@ static int setup_sgl_buf(struct scatterlist *sgl, void *buf, | |||
333 | buf += PAGE_SIZE; | 333 | buf += PAGE_SIZE; |
334 | npage = virt_to_page(buf); | 334 | npage = virt_to_page(buf); |
335 | if (page_to_phys(page) != page_to_phys(npage) - l) { | 335 | if (page_to_phys(page) != page_to_phys(npage) - l) { |
336 | sgl->page_link = 0; | 336 | sg_set_page(sgl, page, l - off, off); |
337 | sg_set_page(sgl++, page, l - off, off); | 337 | sgl = sg_next(sgl); |
338 | if (++n == nents) | 338 | if (++n == nents || sgl == NULL) |
339 | return n; | 339 | return n; |
340 | page = npage; | 340 | page = npage; |
341 | len -= l - off; | 341 | len -= l - off; |
342 | l = off = 0; | 342 | l = off = 0; |
343 | } | 343 | } |
344 | } | 344 | } |
345 | sgl->page_link = 0; | 345 | sg_set_page(sgl, page, len, off); |
346 | sg_set_page(sgl++, page, len, off); | ||
347 | return n + 1; | 346 | return n + 1; |
348 | } | 347 | } |
349 | 348 | ||
@@ -363,7 +362,7 @@ static unsigned int setup_sgl(struct __kfifo *fifo, struct scatterlist *sgl, | |||
363 | } | 362 | } |
364 | l = min(len, size - off); | 363 | l = min(len, size - off); |
365 | 364 | ||
366 | n = setup_sgl_buf(sgl, fifo->data + off, nents, l); | 365 | n = setup_sgl_buf(sgl, fifo->data + off, nents, l); |
367 | n += setup_sgl_buf(sgl + n, fifo->data, nents - n, len - l); | 366 | n += setup_sgl_buf(sgl + n, fifo->data, nents - n, len - l); |
368 | 367 | ||
369 | if (n) | 368 | if (n) |