Commit 7078187a authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

fuse: introduce fuse_simple_request() helper



The following pattern is repeated many times:

	req = fuse_get_req_nopages(fc);
	/* Initialize req->(in|out).args */
	fuse_request_send(fc, req);
	err = req->out.h.error;
	fuse_put_request(req);

Create a new replacement helper:

	/* Initialize args */
	err = fuse_simple_request(fc, &args);

In addition to reducing the code size, this will ease moving from the
complex arg-based to a simpler page-based I/O on the fuse device.

Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
parent f704dcb5
Loading
Loading
Loading
Loading
+29 −0
Original line number Original line Diff line number Diff line
@@ -511,6 +511,35 @@ void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req)
}
}
EXPORT_SYMBOL_GPL(fuse_request_send);
EXPORT_SYMBOL_GPL(fuse_request_send);


ssize_t fuse_simple_request(struct fuse_conn *fc, struct fuse_args *args)
{
	struct fuse_req *req;
	ssize_t ret;

	req = fuse_get_req(fc, 0);
	if (IS_ERR(req))
		return PTR_ERR(req);

	req->in.h.opcode = args->in.h.opcode;
	req->in.h.nodeid = args->in.h.nodeid;
	req->in.numargs = args->in.numargs;
	memcpy(req->in.args, args->in.args,
	       args->in.numargs * sizeof(struct fuse_in_arg));
	req->out.argvar = args->out.argvar;
	req->out.numargs = args->out.numargs;
	memcpy(req->out.args, args->out.args,
	       args->out.numargs * sizeof(struct fuse_arg));
	fuse_request_send(fc, req);
	ret = req->out.h.error;
	if (!ret && args->out.argvar) {
		BUG_ON(args->out.numargs != 1);
		ret = req->out.args[0].size;
	}
	fuse_put_request(fc, req);

	return ret;
}

static void fuse_request_send_nowait_locked(struct fuse_conn *fc,
static void fuse_request_send_nowait_locked(struct fuse_conn *fc,
					    struct fuse_req *req)
					    struct fuse_req *req)
{
{