Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
{
struct syslet_data *sd = td->io_ops->data;
struct syslet_ring *ring = sd->ring;
{
struct syslet_data *sd = td->io_ops->data;
struct syslet_ring *ring = sd->ring;
do {
unsigned int kh = ring->kernel_head;
int ret;
do {
unsigned int kh = ring->kernel_head;
int ret;
unsigned int nr = kh - ring->user_tail;
fio_syslet_add_events(td, nr);
unsigned int nr = kh - ring->user_tail;
fio_syslet_add_events(td, nr);
*/
ret = syscall(__NR_syslet_ring_wait, ring, ring->user_tail);
assert(!ret);
*/
ret = syscall(__NR_syslet_ring_wait, ring, ring->user_tail);
assert(!ret);
}
static int fio_syslet_getevents(struct thread_data *td, int min,
}
static int fio_syslet_getevents(struct thread_data *td, int min,
struct syslet_data *sd = td->io_ops->data;
long ret;
struct syslet_data *sd = td->io_ops->data;
long ret;
- do {
- /*
- * do we have enough immediate completions?
- */
- if (sd->nr_events >= (unsigned int) min)
- break;
-
+ /*
+ * While we have less events than requested, block waiting for them
+ */
+ while (sd->nr_events < (unsigned int) min)
fio_syslet_wait_for_events(td);
fio_syslet_wait_for_events(td);
ret = sd->nr_events;
sd->nr_events = 0;
ret = sd->nr_events;
sd->nr_events = 0;