diff options
| -rw-r--r-- | README.rst | 2 | ||||
| -rw-r--r-- | src/cyber.c | 2 | ||||
| -rw-r--r-- | src/cyber_file.c | 15 |
3 files changed, 13 insertions, 6 deletions
@@ -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) |
