summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2016-05-20 19:46:25 +0000
committerjhb <jhb@FreeBSD.org>2016-05-20 19:46:25 +0000
commited372eaa9f032280d69d640f9d5246be48d4fb25 (patch)
tree73784a9d344c538cf448700f4d61a4891aecfb23 /sys/kern
parent98b4b16d3f113705e13e2dad56c6541a1f79694c (diff)
downloadFreeBSD-src-ed372eaa9f032280d69d640f9d5246be48d4fb25.zip
FreeBSD-src-ed372eaa9f032280d69d640f9d5246be48d4fb25.tar.gz
Consistently set status to -1 when completing an AIO request with an error.
Sponsored by: Chelsio Communications
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/sys_socket.c6
-rw-r--r--sys/kern/vfs_aio.c20
2 files changed, 20 insertions, 6 deletions
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
index e6416b9..4c314a1 100644
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -605,7 +605,6 @@ retry:
cnt -= uio.uio_resid;
td->td_ucred = td_savedcred;
- /* XXX: Not sure if this is needed? */
if (cnt != 0 && (error == ERESTART || error == EINTR ||
error == EWOULDBLOCK))
error = 0;
@@ -633,7 +632,10 @@ retry:
TAILQ_INSERT_HEAD(&sb->sb_aiojobq, job, list);
}
} else {
- aio_complete(job, cnt, error);
+ if (error)
+ aio_complete(job, -1, error);
+ else
+ aio_complete(job, cnt, 0);
SOCKBUF_LOCK(sb);
}
}
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index 20df141..64adc37 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -806,7 +806,10 @@ aio_process_rw(struct kaiocb *job)
cnt -= auio.uio_resid;
td->td_ucred = td_savedcred;
- aio_complete(job, cnt, error);
+ if (error)
+ aio_complete(job, -1, error);
+ else
+ aio_complete(job, cnt, 0);
}
static void
@@ -824,7 +827,10 @@ aio_process_sync(struct kaiocb *job)
if (fp->f_vnode != NULL)
error = aio_fsync_vnode(td, fp->f_vnode);
td->td_ucred = td_savedcred;
- aio_complete(job, 0, error);
+ if (error)
+ aio_complete(job, -1, error);
+ else
+ aio_complete(job, 0, 0);
}
static void
@@ -839,7 +845,10 @@ aio_process_mlock(struct kaiocb *job)
aio_switch_vmspace(job);
error = vm_mlock(job->userproc, job->cred,
__DEVOLATILE(void *, cb->aio_buf), cb->aio_nbytes);
- aio_complete(job, 0, error);
+ if (error)
+ aio_complete(job, -1, error);
+ else
+ aio_complete(job, 0, 0);
}
static void
@@ -2323,7 +2332,10 @@ aio_physwakeup(struct bio *bp)
else
job->inputcharge += nblks;
- aio_complete(job, nbytes, error);
+ if (error)
+ aio_complete(job, -1, error);
+ else
+ aio_complete(job, nbytes, 0);
g_destroy_bio(bp);
}
OpenPOWER on IntegriCloud