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

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

orangefs: do not allow client readahead cache without feature bit

parent 482664dd
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -624,11 +624,14 @@ 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)) {
		if (orangefs_features & ORANGEFS_FEATURE_READAHEAD) {
			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");
			gossip_debug(GOSSIP_INODE_DEBUG,
			    "flush_racache finished\n");
		}
		truncate_inode_pages(file->f_path.dentry->d_inode->i_mapping,
				     0);
	}
+19 −0
Original line number Diff line number Diff line
@@ -842,6 +842,16 @@ static int sysfs_service_op_show(char *kobj_id, char *buf, void *attr)
	if (!strcmp(kobj_id, ORANGEFS_KOBJ_ID)) {
		orangefs_attr = (struct orangefs_attribute *)attr;

		/* Drop unsupported requests first. */
		if (!(orangefs_features & ORANGEFS_FEATURE_READAHEAD) &&
		    (!strcmp(orangefs_attr->attr.name, "readahead_count") ||
		    !strcmp(orangefs_attr->attr.name, "readahead_size") ||
		    !strcmp(orangefs_attr->attr.name,
		    "readahead_count_size"))) {
			rc = -EINVAL;
			goto out;
		}

		if (!strcmp(orangefs_attr->attr.name, "perf_history_size"))
			new_op->upcall.req.param.op =
				ORANGEFS_PARAM_REQUEST_OP_PERF_HISTORY_SIZE;
@@ -1133,6 +1143,15 @@ static int sysfs_service_op_store(char *kobj_id, const char *buf, void *attr)

	if (!strcmp(kobj_id, ORANGEFS_KOBJ_ID)) {
		orangefs_attr = (struct orangefs_attribute *)attr;
		/* Drop unsupported requests first. */
		if (!(orangefs_features & ORANGEFS_FEATURE_READAHEAD) &&
		    (!strcmp(orangefs_attr->attr.name, "readahead_count") ||
		    !strcmp(orangefs_attr->attr.name, "readahead_size") ||
		    !strcmp(orangefs_attr->attr.name,
		    "readahead_count_size"))) {
			rc = -EINVAL;
			goto out;
		}

		if (!strcmp(orangefs_attr->attr.name, "perf_history_size")) {
			if (val > 0) {