aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.rst2
-rw-r--r--src/cyber.c2
-rw-r--r--src/cyber_file.c15
3 files changed, 13 insertions, 6 deletions
diff --git a/README.rst b/README.rst
index df69293..0936c93 100644
--- a/README.rst
+++ b/README.rst
@@ -12,7 +12,7 @@ Purism Librem 13):
- High throughput access to **CYBER** space
- - Up-to 4.2 Gibibyte per second read speed
+ - Up-to 6.66 Gibibyte per second read speed
- Up-to 12 Gibibyte per second write speed
- Unlimited storage
diff --git a/src/cyber.c b/src/cyber.c
index 3f454af..c19d9ec 100644
--- a/src/cyber.c
+++ b/src/cyber.c
@@ -25,5 +25,5 @@
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Felix Morgner");
-MODULE_VERSION("42.1337");
+MODULE_VERSION("42.1337.666");
MODULE_DESCRIPTION("Add CYBER to your system");
diff --git a/src/cyber_file.c b/src/cyber_file.c
index d7264c1..deaed39 100644
--- a/src/cyber_file.c
+++ b/src/cyber_file.c
@@ -39,12 +39,19 @@ int cyber_file_open(struct inode * inode, struct file * file)
ssize_t cyber_file_read(struct file * file, char __user * buffer, size_t size, loff_t * offset)
{
- int const cybers = (size > PAGE_SIZE ? PAGE_SIZE : size) / 8;
- if(copy_to_user(buffer, cyberSpace, cybers * 8))
+ int const cyberChunks = (size + PAGE_SIZE - 1) / PAGE_SIZE;
+ int const cybersPerChunk = (size > PAGE_SIZE ? PAGE_SIZE : size) / 8;
+ int remainingChunks = cyberChunks;
+
+ for(; remainingChunks > 0; --remainingChunks)
{
- return -EFAULT;
+ if(copy_to_user(buffer, cyberSpace, cybersPerChunk * 8))
+ {
+ return -EFAULT;
+ }
}
- return cybers * 8;
+
+ return cyberChunks * cybersPerChunk * 8;
}
ssize_t cyber_file_write(struct file * file, char __user const * buffer, size_t size, loff_t * offset)