+int p2pkp_write_in_file(struct file *file, char *buffer, int len)
+{
+ // Create variables
+ int bytes_written, ret;
+ mm_segment_t fs;
+
+ if(file == NULL) {
+ ERROR("filp_open error!!");
+ return -EINVAL;
+ }
+ DEBUG("Changinig segment descriptor");
+ // Get current segment descriptor
+ fs = get_fs();
+ // Set segment descriptor associated to kernel space
+ set_fs(get_ds());
+ DEBUG("Changed segment descriptor - buffer is %p", buffer);
+
+ bytes_written = 0;
+ do {
+ ret = file->f_op->write(file, buffer + bytes_written, len, &file->f_pos);
+ if (ret < 0) {
+ ERROR("error while reading from file");
+ break;
+ }
+ len -= ret;
+ bytes_written += ret;
+ } while (len > 0);
+ set_fs(fs);
+ return ret < 0 ? ret : bytes_written;
+}
+
+
+