Message ID | 20241209-fuse-uring-for-6-10-rfc4-v8-7-d9f9f2642be3@ddn.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | fuse: fuse-over-io-uring | expand |
On Mon, Dec 9, 2024 at 6:57 AM Bernd Schubert <bschubert@ddn.com> 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@ddn.com> LGTM. Reviewed-by: Joanne Koong <joannelkoong@gmail.com> > --- > 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 >
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); +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
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@ddn.com> --- fs/fuse/dev.c | 30 ++++++++---------------------- fs/fuse/fuse_dev_i.h | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 22 deletions(-)