vfs_io_uring: split out a vfs_io_uring_pread_submit() function
authorStefan Metzmacher <metze@samba.org>
Fri, 8 May 2020 09:17:51 +0000 (11:17 +0200)
committerKarolin Seeger <kseeger@samba.org>
Thu, 14 May 2020 07:25:45 +0000 (07:25 +0000)
This can be reused when we add handling for short reads.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14361

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 9de4f8be1dc8b4274891016191a5ca1f724e08b3)

source3/modules/vfs_io_uring.c

index 1d48bd192fe102208292b7a7a18ac6f9c048889c..19e268e63db47a0e4e86260869cc9f91b849aee1 100644 (file)
@@ -399,10 +399,13 @@ static void vfs_io_uring_fd_handler(struct tevent_context *ev,
 
 struct vfs_io_uring_pread_state {
        struct vfs_io_uring_request ur;
+       struct files_struct *fsp;
+       off_t offset;
        struct iovec iov;
        size_t nread;
 };
 
+static void vfs_io_uring_pread_submit(struct vfs_io_uring_pread_state *state);
 static void vfs_io_uring_pread_completion(struct vfs_io_uring_request *cur,
                                          const char *location);
 
@@ -441,13 +444,11 @@ static struct tevent_req *vfs_io_uring_pread_send(struct vfs_handle_struct *hand
                return tevent_req_post(req, ev);
        }
 
+       state->fsp = fsp;
+       state->offset = offset;
        state->iov.iov_base = (void *)data;
        state->iov.iov_len = n;
-       io_uring_prep_readv(&state->ur.sqe,
-                           fsp->fh->fd,
-                           &state->iov, 1,
-                           offset);
-       vfs_io_uring_request_submit(&state->ur);
+       vfs_io_uring_pread_submit(state);
 
        if (!tevent_req_is_in_progress(req)) {
                return tevent_req_post(req, ev);
@@ -457,6 +458,15 @@ static struct tevent_req *vfs_io_uring_pread_send(struct vfs_handle_struct *hand
        return req;
 }
 
+static void vfs_io_uring_pread_submit(struct vfs_io_uring_pread_state *state)
+{
+       io_uring_prep_readv(&state->ur.sqe,
+                           state->fsp->fh->fd,
+                           &state->iov, 1,
+                           state->offset);
+       vfs_io_uring_request_submit(&state->ur);
+}
+
 static void vfs_io_uring_pread_completion(struct vfs_io_uring_request *cur,
                                          const char *location)
 {