]> git.karo-electronics.de Git - linux-beck.git/commitdiff
orangefs: re-add flush_racache from out-of-tree
authorMartin Brandenburg <martin@omnibond.com>
Tue, 2 Aug 2016 20:32:15 +0000 (16:32 -0400)
committerMartin Brandenburg <martin@omnibond.com>
Mon, 8 Aug 2016 19:12:29 +0000 (15:12 -0400)
Signed-off-by: Martin Brandenburg <martin@omnibond.com>
fs/orangefs/file.c

index c14eab567f56f976e782f5b3ccf392a66f1d8624..43c08b5c71686fc6f49b91af53076fe152dc6455 100644 (file)
 #include <linux/fs.h>
 #include <linux/pagemap.h>
 
+static int flush_racache(struct inode *inode)
+{
+       struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
+       struct orangefs_kernel_op_s *new_op;
+       int ret;
+
+       gossip_debug(GOSSIP_UTILS_DEBUG,
+           "%s: %pU: Handle is %pU | fs_id %d\n", __func__,
+           get_khandle_from_ino(inode), &orangefs_inode->refn.khandle,
+           orangefs_inode->refn.fs_id);
+
+       new_op = op_alloc(ORANGEFS_VFS_OP_RA_FLUSH);
+       if (!new_op)
+               return -ENOMEM;
+       new_op->upcall.req.ra_cache_flush.refn = orangefs_inode->refn;
+
+       ret = service_operation(new_op, "orangefs_flush_racache",
+           get_interruptible_flag(inode));
+
+       gossip_debug(GOSSIP_UTILS_DEBUG, "%s: got return value of %d\n",
+           __func__, ret);
+
+       op_release(new_op);
+       return ret;
+}
+
 /*
  * Copy to client-core's address space from the buffers specified
  * by the iovec upto total_size bytes.
@@ -597,9 +623,15 @@ static int orangefs_file_release(struct inode *inode, struct file *file)
         */
        if (file->f_path.dentry->d_inode &&
            file->f_path.dentry->d_inode->i_mapping &&
-           mapping_nrpages(&file->f_path.dentry->d_inode->i_data))
+           mapping_nrpages(&file->f_path.dentry->d_inode->i_data)) {
+               gossip_debug(GOSSIP_INODE_DEBUG,
+                   "calling flush_racache on %pU\n",
+                   get_khandle_from_ino(inode));
+               flush_racache(inode);
+               gossip_debug(GOSSIP_INODE_DEBUG, "flush_racache finished\n");
                truncate_inode_pages(file->f_path.dentry->d_inode->i_mapping,
                                     0);
+       }
        return 0;
 }