Commit fd3c07ac authored by Baokun Li's avatar Baokun Li Committed by Zizhi Wo
Browse files

cachefiles: remove err_put_fd label in cachefiles_ondemand_daemon_read()

mainline inclusion
from mainline-v6.10-rc4
commit 3e6d704f02aa4c50c7bc5fe91a4401df249a137b
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IA6I1T

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3e6d704f02aa4c50c7bc5fe91a4401df249a137b



--------------------------------

The err_put_fd label is only used once, so remove it to make the code
more readable. In addition, the logic for deleting error request and
CLOSE request is merged to simplify the code.

Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
Link: https://lore.kernel.org/r/20240522114308.2402121-6-libaokun@huaweicloud.com


Acked-by: default avatarJeff Layton <jlayton@kernel.org>
Reviewed-by: default avatarJia Zhu <zhujia.zj@bytedance.com>
Reviewed-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: default avatarJingbo Xu <jefflexu@linux.alibaba.com>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
Signed-off-by: default avatarZizhi Wo <wozizhi@huawei.com>
parent 400e825f
Loading
Loading
Loading
Loading
+16 −29
Original line number Diff line number Diff line
@@ -305,7 +305,6 @@ ssize_t cachefiles_ondemand_daemon_read(struct cachefiles_cache *cache,
{
	struct cachefiles_req *req;
	struct cachefiles_msg *msg;
	unsigned long id = 0;
	size_t n;
	int ret = 0;
	XA_STATE(xas, &cache->reqs, cache->req_id_next);
@@ -340,39 +339,26 @@ ssize_t cachefiles_ondemand_daemon_read(struct cachefiles_cache *cache,
	cachefiles_grab_object(req->object, cachefiles_obj_get_read_req);
	xa_unlock(&cache->reqs);

	id = xas.xa_index;

	if (msg->opcode == CACHEFILES_OP_OPEN) {
		ret = cachefiles_ondemand_get_fd(req);
		if (ret) {
			cachefiles_ondemand_set_object_close(req->object);
			goto error;
			goto out;
		}
	}

	msg->msg_id = id;
	msg->msg_id = xas.xa_index;
	msg->object_id = req->object->ondemand->ondemand_id;

	if (copy_to_user(_buffer, msg, n) != 0) {
		ret = -EFAULT;
		goto err_put_fd;
	}

	cachefiles_put_object(req->object, cachefiles_obj_put_read_req);
	/* CLOSE request has no reply */
	if (msg->opcode == CACHEFILES_OP_CLOSE) {
		xa_erase(&cache->reqs, id);
		complete(&req->done);
	}

	cachefiles_req_put(req);
	return n;

err_put_fd:
		if (msg->opcode == CACHEFILES_OP_OPEN)
			close_fd(((struct cachefiles_open *)msg->data)->fd);
error:
	}
out:
	cachefiles_put_object(req->object, cachefiles_obj_put_read_req);
	/* Remove error request and CLOSE request has no reply */
	if (ret || msg->opcode == CACHEFILES_OP_CLOSE) {
		xas_reset(&xas);
		xas_lock(&xas);
		if (xas_load(&xas) == req) {
@@ -381,8 +367,9 @@ ssize_t cachefiles_ondemand_daemon_read(struct cachefiles_cache *cache,
			xas_store(&xas, NULL);
		}
		xas_unlock(&xas);
	}
	cachefiles_req_put(req);
	return ret;
	return ret ? ret : n;
}

typedef int (*init_req_fn)(struct cachefiles_req *req, void *private);