Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed1e1587 authored by Martin Brandenburg's avatar Martin Brandenburg
Browse files

orangefs: re-add flush_racache from out-of-tree

parent 680908e5
Loading
Loading
Loading
Loading
+33 −1
Original line number Diff line number Diff line
@@ -14,6 +14,32 @@
#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;
}