mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
fuse-uring: refactor io-uring header copying to ring
Move header copying to ring logic into a new copy_header_to_ring() function. This makes the copy_to_user() logic more clear and centralizes error handling / rate-limited logging. Reviewed-by: Bernd Schubert <bschubert@ddn.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Baokun Li <libaokun@linux.alibaba.com> Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
committed by
Miklos Szeredi
parent
6813da0950
commit
6582f8a066
+21
-18
@@ -578,6 +578,18 @@ err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static __always_inline int copy_header_to_ring(void __user *ring,
|
||||
const void *header,
|
||||
size_t header_size)
|
||||
{
|
||||
if (copy_to_user(ring, header, header_size)) {
|
||||
pr_info_ratelimited("Copying header to ring failed.\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fuse_uring_copy_from_ring(struct fuse_ring *ring,
|
||||
struct fuse_req *req,
|
||||
struct fuse_ring_ent *ent)
|
||||
@@ -640,13 +652,11 @@ static int fuse_uring_args_to_ring(struct fuse_ring *ring, struct fuse_req *req,
|
||||
* Some op code have that as zero size.
|
||||
*/
|
||||
if (args->in_args[0].size > 0) {
|
||||
err = copy_to_user(&ent->headers->op_in, in_args->value,
|
||||
in_args->size);
|
||||
if (err) {
|
||||
pr_info_ratelimited(
|
||||
"Copying the header failed.\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
err = copy_header_to_ring(&ent->headers->op_in,
|
||||
in_args->value,
|
||||
in_args->size);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
in_args++;
|
||||
num_args--;
|
||||
@@ -662,9 +672,8 @@ static int fuse_uring_args_to_ring(struct fuse_ring *ring, struct fuse_req *req,
|
||||
}
|
||||
|
||||
ent_in_out.payload_sz = cs.ring.copied_sz;
|
||||
err = copy_to_user(&ent->headers->ring_ent_in_out, &ent_in_out,
|
||||
sizeof(ent_in_out));
|
||||
return err ? -EFAULT : 0;
|
||||
return copy_header_to_ring(&ent->headers->ring_ent_in_out, &ent_in_out,
|
||||
sizeof(ent_in_out));
|
||||
}
|
||||
|
||||
static int fuse_uring_copy_to_ring(struct fuse_ring_ent *ent,
|
||||
@@ -693,14 +702,8 @@ static int fuse_uring_copy_to_ring(struct fuse_ring_ent *ent,
|
||||
}
|
||||
|
||||
/* copy fuse_in_header */
|
||||
err = copy_to_user(&ent->headers->in_out, &req->in.h,
|
||||
sizeof(req->in.h));
|
||||
if (err) {
|
||||
err = -EFAULT;
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return copy_header_to_ring(&ent->headers->in_out, &req->in.h,
|
||||
sizeof(req->in.h));
|
||||
}
|
||||
|
||||
static int fuse_uring_prepare_send(struct fuse_ring_ent *ent,
|
||||
|
||||
Reference in New Issue
Block a user