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