On Mon, Dec 9, 2024 at 6:57 AM Bernd Schubert <bschubert@xxxxxxx> wrote: > > Move 'struct fuse_copy_state' and fuse_copy_* functions > to fuse_dev_i.h to make it available for fuse-io-uring. > 'copy_out_args()' is renamed to 'fuse_copy_out_args'. > > Signed-off-by: Bernd Schubert <bschubert@xxxxxxx> LGTM. Reviewed-by: Joanne Koong <joannelkoong@xxxxxxxxx> > --- > fs/fuse/dev.c | 30 ++++++++---------------------- > fs/fuse/fuse_dev_i.h | 25 +++++++++++++++++++++++++ > 2 files changed, 33 insertions(+), 22 deletions(-) > > diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c > index 623c5a067c1841e8210b5b4e063e7b6690f1825a..6ee7e28a84c80a3e7c8dc933986c0388371ff6cd 100644 > --- a/fs/fuse/dev.c > +++ b/fs/fuse/dev.c > @@ -678,22 +678,8 @@ static int unlock_request(struct fuse_req *req) > return err; > } > > -struct fuse_copy_state { > - int write; > - struct fuse_req *req; > - struct iov_iter *iter; > - struct pipe_buffer *pipebufs; > - struct pipe_buffer *currbuf; > - struct pipe_inode_info *pipe; > - unsigned long nr_segs; > - struct page *pg; > - unsigned len; > - unsigned offset; > - unsigned move_pages:1; > -}; > - > -static void fuse_copy_init(struct fuse_copy_state *cs, int write, > - struct iov_iter *iter) > +void fuse_copy_init(struct fuse_copy_state *cs, int write, > + struct iov_iter *iter) > { > memset(cs, 0, sizeof(*cs)); > cs->write = write; > @@ -1054,9 +1040,9 @@ static int fuse_copy_one(struct fuse_copy_state *cs, void *val, unsigned size) > } > > /* Copy request arguments to/from userspace buffer */ > -static int fuse_copy_args(struct fuse_copy_state *cs, unsigned numargs, > - unsigned argpages, struct fuse_arg *args, > - int zeroing) > +int fuse_copy_args(struct fuse_copy_state *cs, unsigned numargs, > + unsigned argpages, struct fuse_arg *args, > + int zeroing) > { > int err = 0; > unsigned i; > @@ -1933,8 +1919,8 @@ static struct fuse_req *request_find(struct fuse_pqueue *fpq, u64 unique) > return NULL; > } > > -static int copy_out_args(struct fuse_copy_state *cs, struct fuse_args *args, > - unsigned nbytes) > +int fuse_copy_out_args(struct fuse_copy_state *cs, struct fuse_args *args, > + unsigned nbytes) > { > unsigned reqsize = sizeof(struct fuse_out_header); > > @@ -2036,7 +2022,7 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud, > if (oh.error) > err = nbytes != sizeof(oh) ? -EINVAL : 0; > else > - err = copy_out_args(cs, req->args, nbytes); > + err = fuse_copy_out_args(cs, req->args, nbytes); > fuse_copy_finish(cs); > > spin_lock(&fpq->lock); > diff --git a/fs/fuse/fuse_dev_i.h b/fs/fuse/fuse_dev_i.h > index 08a7e88e002773fcd18c25a229c7aa6450831401..21eb1bdb492d04f0a406d25bb8d300b34244dce2 100644 > --- a/fs/fuse/fuse_dev_i.h > +++ b/fs/fuse/fuse_dev_i.h > @@ -12,6 +12,23 @@ > #define FUSE_INT_REQ_BIT (1ULL << 0) > #define FUSE_REQ_ID_STEP (1ULL << 1) > > +struct fuse_arg; > +struct fuse_args; > + > +struct fuse_copy_state { > + int write; > + struct fuse_req *req; > + struct iov_iter *iter; > + struct pipe_buffer *pipebufs; > + struct pipe_buffer *currbuf; > + struct pipe_inode_info *pipe; > + unsigned long nr_segs; > + struct page *pg; > + unsigned int len; > + unsigned int offset; > + unsigned int move_pages:1; > +}; > + > static inline struct fuse_dev *fuse_get_dev(struct file *file) > { > /* > @@ -23,5 +40,13 @@ static inline struct fuse_dev *fuse_get_dev(struct file *file) > > void fuse_dev_end_requests(struct list_head *head); > > +void fuse_copy_init(struct fuse_copy_state *cs, int write, > + struct iov_iter *iter); nit: indentation of this line is misaligned > +int fuse_copy_args(struct fuse_copy_state *cs, unsigned int numargs, > + unsigned int argpages, struct fuse_arg *args, > + int zeroing); > +int fuse_copy_out_args(struct fuse_copy_state *cs, struct fuse_args *args, > + unsigned int nbytes); > + > #endif > > > -- > 2.43.0 >