aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/orangefs/orangefs-bufmap.c
diff options
context:
space:
mode:
authorMike Marshall <hubcap@omnibond.com>2019-03-25 18:59:29 -0400
committerMike Marshall <hubcap@omnibond.com>2019-05-03 14:32:39 -0400
commitdd59a6475c4cf69afac2ade01ab732b7825a2a45 (patch)
treea7e8b69bef478fed6ed5056df3cc58bb7697522e /fs/orangefs/orangefs-bufmap.c
parentorangefs: pass slot index back to readpage. (diff)
downloadwireguard-linux-dd59a6475c4cf69afac2ade01ab732b7825a2a45.tar.xz
wireguard-linux-dd59a6475c4cf69afac2ade01ab732b7825a2a45.zip
orangefs: copy Orangefs-sized blocks into the pagecache if possible.
->readpage looks in file->private_data to try and find out how the userspace program set "count" in read(2) or with "dd bs=" or whatever. ->readpage uses "count" and inode->i_size to calculate how much data Orangefs should deposit in the Orangefs shared buffer, and remembers which slot the data is in. After copying data from the Orangefs shared buffer slot into "the page", readpage tries to increment through the pagecache index and fill as many pages as it can from the extra data in the shared buffer. Hopefully these extra pages will soon be needed by the vfs, and they'll be in the pagecache already. Signed-off-by: Mike Marshall <hubcap@omnibond.com> Signed-off-by: Martin Brandenburg <martin@omnibond.com>
Diffstat (limited to 'fs/orangefs/orangefs-bufmap.c')
-rw-r--r--fs/orangefs/orangefs-bufmap.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/orangefs/orangefs-bufmap.c b/fs/orangefs/orangefs-bufmap.c
index 443bcd8c3c19..d4811f981608 100644
--- a/fs/orangefs/orangefs-bufmap.c
+++ b/fs/orangefs/orangefs-bufmap.c
@@ -538,3 +538,16 @@ int orangefs_bufmap_copy_to_iovec(struct iov_iter *iter,
}
return 0;
}
+
+void orangefs_bufmap_page_fill(void *page_to,
+ int buffer_index,
+ int slot_index)
+{
+ struct orangefs_bufmap_desc *from;
+ void *page_from;
+
+ from = &__orangefs_bufmap->desc_array[buffer_index];
+ page_from = kmap_atomic(from->page_array[slot_index]);
+ memcpy(page_to, page_from, PAGE_SIZE);
+ kunmap_atomic(page_from);
+}