title: How to write a Linux Driver, that only forwards file operations?
body: <p>I need to implement a Linux Kernel Driver, that (in the first step) only forwards all file operations to another file (in later steps, this should be managed and manipulated, but I don't want to discuss this here).</p>
  
  <p>My idea is the following, but when reading, the kernel crashes:</p>
  
  <pre><code>static struct {
      struct file *file;
      char *file_name;
      int open;
  } file_out_data = {
  .file_name  = "/any_file",
  .open       = 0, 
  };
  
  
  int memory_open(struct inode *inode, struct file *filp) {
    PRINTK("&lt;1&gt;open memory module\n");
      /* 
       * We don't want to talk to two processes at the same time 
       */
      if (file_out_data.open)
          return -EBUSY;
      /*
       * Initialize the message 
       */
      Message_Ptr = Message;
      try_module_get(THIS_MODULE);
  
          file_out_data.file = filp_open(file_out_data.file_name, filp-&gt;f_flags, filp-&gt;f_mode); //here should be another return handling in case of fail
      file_out_data.open++;
  
    /* Success */
    return 0;
  }
  
  int memory_release(struct inode *inode, struct file *filp) {
        PRINTK("&lt;1&gt;release memory module\n");
      /* 
       * We're now ready for our next caller 
       */
      file_out_data.open--;
      filp_close(file_out_data.file,NULL);
  
      module_put(THIS_MODULE);
    /* Success */
    return 0;
  }
  
  ssize_t memory_read(struct file *filp, char *buf, 
                      size_t count, loff_t *f_pos) { 
     PRINTK("&lt;1&gt;read memory module \n");
  ret=file_out_data.file-&gt;f_op-&gt;read(file_out_data.file,buf,count,f_pos); //corrected one, false one is to find in the history
      return ret;
  
  }
  </code></pre>
  
  <p>So, can anyone please tell me why?</p>