hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/fs/orangefs/orangefs-bufmap.c
....@@ -105,7 +105,7 @@
105105 left = t;
106106 else
107107 left = t + (left - n);
108
- if (unlikely(signal_pending(current)))
108
+ if (signal_pending(current))
109109 left = -EINTR;
110110 } while (left > 0);
111111
....@@ -168,10 +168,7 @@
168168 static void
169169 orangefs_bufmap_unmap(struct orangefs_bufmap *bufmap)
170170 {
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);
175172 }
176173
177174 static void
....@@ -267,8 +264,8 @@
267264 int offset = 0, ret, i;
268265
269266 /* 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);
272269
273270 if (ret < 0)
274271 return ret;
....@@ -279,7 +276,7 @@
279276
280277 for (i = 0; i < ret; i++) {
281278 SetPageError(bufmap->page_array[i]);
282
- put_page(bufmap->page_array[i]);
279
+ unpin_user_page(bufmap->page_array[i]);
283280 }
284281 return -ENOMEM;
285282 }
....@@ -537,3 +534,16 @@
537534 }
538535 return 0;
539536 }
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
+}