diff options
-rw-r--r-- | source3/include/proto.h | 2 | ||||
-rw-r--r-- | source3/include/smb.h | 3 | ||||
-rw-r--r-- | source3/modules/vfs_aio_fork.c | 9 | ||||
-rw-r--r-- | source3/smbd/aio.c | 36 |
4 files changed, 10 insertions, 40 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 884ce3f07f..41ab440fd8 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -5321,7 +5321,7 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn, size_t numtowrite); int wait_for_aio_completion(files_struct *fsp); void cancel_aio_by_fsp(files_struct *fsp); -void smbd_aio_complete_mid(uint64_t mid); +void smbd_aio_complete_aio_ex(struct aio_extra *aio_ex); /* The following definitions come from smbd/blocking.c */ diff --git a/source3/include/smb.h b/source3/include/smb.h index d20a04ea97..877588a559 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -1963,4 +1963,7 @@ struct deferred_open_record; #define CSC_POLICY_PROGRAMS 2 #define CSC_POLICY_DISABLE 3 +/* Used inside aio code. */ +struct aio_extra; + #endif /* _SMB_H */ diff --git a/source3/modules/vfs_aio_fork.c b/source3/modules/vfs_aio_fork.c index 8fd89362bc..38a1c21e29 100644 --- a/source3/modules/vfs_aio_fork.c +++ b/source3/modules/vfs_aio_fork.c @@ -382,8 +382,8 @@ static void handle_aio_completion(struct event_context *event_ctx, struct fd_event *event, uint16 flags, void *p) { + struct aio_extra *aio_ex = NULL; struct aio_child *child = (struct aio_child *)p; - uint64_t mid; DEBUG(10, ("handle_aio_completion called with flags=%d\n", flags)); @@ -411,12 +411,7 @@ static void handle_aio_completion(struct event_context *event_ctx, child->retval.size); } - /* FIXME - this won't work for SMB2. */ - mid = (uint64_t)child->aiocb->aio_sigevent.sigev_value.sival_int; - - DEBUG(10, ("mid %d finished\n", (int)mid)); - - smbd_aio_complete_mid(mid); + smbd_aio_complete_aio_ex(aio_ex); } static int aio_child_destructor(struct aio_child *child) diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c index 8cc26f1fef..c7a70b3e54 100644 --- a/source3/smbd/aio.c +++ b/source3/smbd/aio.c @@ -62,7 +62,7 @@ static void smbd_aio_signal_handler(struct tevent_context *ev_ctx, struct aio_extra *aio_ex = (struct aio_extra *) info->si_value.sival_ptr; - smbd_aio_complete_mid(aio_ex->req->mid); + smbd_aio_complete_aio_ex(aio_ex); } @@ -123,26 +123,6 @@ static struct aio_extra *create_aio_extra(files_struct *fsp, size_t buflen) } /**************************************************************************** - Given the mid find the extended aio struct containing it. -*****************************************************************************/ - -static struct aio_extra *find_aio_ex(uint64_t mid) -{ - struct aio_extra *p; - - for( p = aio_list_head; p; p = p->next) { - if (mid == p->req->mid) { - return p; - } - } - return NULL; -} - -/**************************************************************************** - We can have these many aio buffers in flight. -*****************************************************************************/ - -/**************************************************************************** Set up an aio request from a SMBreadX call. *****************************************************************************/ @@ -577,23 +557,15 @@ static bool handle_aio_completed(struct aio_extra *aio_ex, int *perr) Handle any aio completion inline. *****************************************************************************/ -void smbd_aio_complete_mid(uint64_t mid) +void smbd_aio_complete_aio_ex(struct aio_extra *aio_ex) { files_struct *fsp = NULL; - struct aio_extra *aio_ex = find_aio_ex(mid); int ret = 0; outstanding_aio_calls--; DEBUG(10,("smbd_aio_complete_mid: mid[%llu]\n", - (unsigned long long)mid)); - - if (!aio_ex) { - DEBUG(3,("smbd_aio_complete_mid: Can't find record to " - "match mid %llu.\n", - (unsigned long long)mid)); - return; - } + (unsigned long long)aio_ex->req->mid)); fsp = aio_ex->fsp; if (fsp == NULL) { @@ -601,7 +573,7 @@ void smbd_aio_complete_mid(uint64_t mid) * ignore. */ DEBUG( 3,( "smbd_aio_complete_mid: file closed whilst " "aio outstanding (mid[%llu]).\n", - (unsigned long long)mid)); + (unsigned long long)aio_ex->req->mid)); return; } |