| .. | .. |
|---|
| 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 | +} |
|---|