.. | .. |
---|
105 | 105 | left = t; |
---|
106 | 106 | else |
---|
107 | 107 | left = t + (left - n); |
---|
108 | | - if (unlikely(signal_pending(current))) |
---|
| 108 | + if (signal_pending(current)) |
---|
109 | 109 | left = -EINTR; |
---|
110 | 110 | } while (left > 0); |
---|
111 | 111 | |
---|
.. | .. |
---|
168 | 168 | static void |
---|
169 | 169 | orangefs_bufmap_unmap(struct orangefs_bufmap *bufmap) |
---|
170 | 170 | { |
---|
171 | | - int i; |
---|
172 | | - |
---|
173 | | - for (i = 0; i < bufmap->page_count; i++) |
---|
174 | | - put_page(bufmap->page_array[i]); |
---|
| 171 | + unpin_user_pages(bufmap->page_array, bufmap->page_count); |
---|
175 | 172 | } |
---|
176 | 173 | |
---|
177 | 174 | static void |
---|
.. | .. |
---|
267 | 264 | int offset = 0, ret, i; |
---|
268 | 265 | |
---|
269 | 266 | /* map the pages */ |
---|
270 | | - ret = get_user_pages_fast((unsigned long)user_desc->ptr, |
---|
271 | | - bufmap->page_count, 1, bufmap->page_array); |
---|
| 267 | + ret = pin_user_pages_fast((unsigned long)user_desc->ptr, |
---|
| 268 | + bufmap->page_count, FOLL_WRITE, bufmap->page_array); |
---|
272 | 269 | |
---|
273 | 270 | if (ret < 0) |
---|
274 | 271 | return ret; |
---|
.. | .. |
---|
279 | 276 | |
---|
280 | 277 | for (i = 0; i < ret; i++) { |
---|
281 | 278 | SetPageError(bufmap->page_array[i]); |
---|
282 | | - put_page(bufmap->page_array[i]); |
---|
| 279 | + unpin_user_page(bufmap->page_array[i]); |
---|
283 | 280 | } |
---|
284 | 281 | return -ENOMEM; |
---|
285 | 282 | } |
---|
.. | .. |
---|
537 | 534 | } |
---|
538 | 535 | return 0; |
---|
539 | 536 | } |
---|
| 537 | + |
---|
| 538 | +void orangefs_bufmap_page_fill(void *page_to, |
---|
| 539 | + int buffer_index, |
---|
| 540 | + int slot_index) |
---|
| 541 | +{ |
---|
| 542 | + struct orangefs_bufmap_desc *from; |
---|
| 543 | + void *page_from; |
---|
| 544 | + |
---|
| 545 | + from = &__orangefs_bufmap->desc_array[buffer_index]; |
---|
| 546 | + page_from = kmap_atomic(from->page_array[slot_index]); |
---|
| 547 | + memcpy(page_to, page_from, PAGE_SIZE); |
---|
| 548 | + kunmap_atomic(page_from); |
---|
| 549 | +} |
---|