diff options
Diffstat (limited to 'kernel')
| -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 02192dd905c..4502604ecad 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) |
