mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
smbd: Use asys_results
When multiple aio requests finish simultaneously, this saves a few syscalls Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Thu Mar 27 08:05:46 CET 2014 on sn-devel-104
This commit is contained in:
parent
c35fec883c
commit
2e2137f56d
@ -793,39 +793,36 @@ static void vfswrap_asys_finished(struct tevent_context *ev,
|
||||
uint16_t flags, void *p)
|
||||
{
|
||||
struct asys_context *asys_ctx = (struct asys_context *)p;
|
||||
struct asys_result results[outstanding_aio_calls];
|
||||
int i, ret;
|
||||
|
||||
if ((flags & TEVENT_FD_READ) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
ret = asys_results(asys_ctx, results, outstanding_aio_calls);
|
||||
if (ret < 0) {
|
||||
DEBUG(1, ("asys_results returned %s\n", strerror(-ret)));
|
||||
return;
|
||||
}
|
||||
|
||||
for (i=0; i<ret; i++) {
|
||||
struct asys_result *result = &results[i];
|
||||
struct tevent_req *req;
|
||||
struct vfswrap_asys_state *state;
|
||||
struct asys_result result;
|
||||
int res;
|
||||
|
||||
res = asys_results(asys_ctx, &result, 1);
|
||||
if (res < 0) {
|
||||
DEBUG(1, ("asys_result returned %s\n",
|
||||
strerror(-res)));
|
||||
return;
|
||||
}
|
||||
if (res == 0) {
|
||||
return;
|
||||
if ((result->ret == -1) && (result->err == ECANCELED)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((result.ret == -1) && (result.err == ECANCELED)) {
|
||||
return;
|
||||
}
|
||||
|
||||
req = talloc_get_type_abort(result.private_data,
|
||||
req = talloc_get_type_abort(result->private_data,
|
||||
struct tevent_req);
|
||||
state = tevent_req_data(req, struct vfswrap_asys_state);
|
||||
|
||||
talloc_set_destructor(state, NULL);
|
||||
|
||||
state->ret = result.ret;
|
||||
state->err = result.err;
|
||||
state->ret = result->ret;
|
||||
state->err = result->err;
|
||||
tevent_req_defer_callback(req, ev);
|
||||
tevent_req_done(req);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user