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: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
@@ -511,6 +511,35 @@ void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req)
|
||||
}
|
||||
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,
|
||||
struct fuse_req *req)
|
||||
{
|
||||
|
Reference in New Issue
Block a user