1 #include <asm/uaccess.h>
3 #include <linux/buffer_head.h>
5 #include "p2pkp_file.h"
6 #include "p2pkp_debug.h"
8 struct file* p2pkp_open_file_read(const char *filename)
11 file = filp_open(filename, O_RDONLY, 0);
12 return IS_ERR_OR_NULL(file) ? NULL : file;
15 struct file* p2pkp_open_file_write(const char *filename, mode_t mode)
18 file = filp_open(filename, O_CREAT|O_TRUNC, mode);
19 return IS_ERR_OR_NULL(file) ? NULL : file;
22 void p2pkp_close_file(struct file *file)
25 filp_close(file,NULL);
28 int p2pkp_write_in_file(struct file *file, char *buffer, int len)
31 int bytes_written, ret;
35 ERROR("filp_open error!!");
38 DEBUG("Changinig segment descriptor");
39 // Get current segment descriptor
41 // Set segment descriptor associated to kernel space
43 DEBUG("Changed segment descriptor - buffer is %p", buffer);
47 ret = file->f_op->write(file, buffer + bytes_written, len, &file->f_pos);
49 ERROR("error while reading from file");
56 return ret < 0 ? ret : bytes_written;
61 int p2pkp_read_from_file(struct file *file, char *buffer, int len)
64 int read_bytes, offset;
68 ERROR("filp_open error!!");
71 DEBUG("Changinig segment descriptor");
72 // Get current segment descriptor
74 // Set segment descriptor associated to kernel space
76 DEBUG("Changed segment descriptor - buffer is %p", buffer);
80 read_bytes = file->f_op->read(file, buffer + offset, len, &file->f_pos);
85 } while (/*(read_bytes < 0 && errno == EINVAL)||*/(read_bytes > 0 && len > 0));
90 ERROR("error while reading from file!");