aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/kfifo.c13
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)