Ejemplo n.º 1
0
Archivo: log.c Proyecto: jeefke/fio
int read_iolog_get(struct thread_data *td, struct io_u *io_u)
{
	struct io_piece *ipo;
	unsigned long elapsed;
	
	while (!flist_empty(&td->io_log_list)) {
		int ret;

		ipo = flist_entry(td->io_log_list.next, struct io_piece, list);
		flist_del(&ipo->list);
		remove_trim_entry(td, ipo);

		ret = ipo_special(td, ipo);
		if (ret < 0) {
			free(ipo);
			break;
		} else if (ret > 0) {
			free(ipo);
			continue;
		}

		io_u->ddir = ipo->ddir;
		if (ipo->ddir != DDIR_WAIT) {
			io_u->offset = ipo->offset;
			io_u->buflen = ipo->len;
			io_u->file = td->files[ipo->fileno];
			get_file(io_u->file);
			dprint(FD_IO, "iolog: get %llu/%lu/%s\n", io_u->offset,
						io_u->buflen, io_u->file->file_name);
			if (ipo->delay)
				iolog_delay(td, ipo->delay);
		} else {
			elapsed = mtime_since_genesis();
			if (ipo->delay > elapsed)
				usec_sleep(td, (ipo->delay - elapsed) * 1000);
				
		}

		free(ipo);
		
		if (io_u->ddir != DDIR_WAIT)
			return 0;
	}

	td->done = 1;
	return 1;
}
Ejemplo n.º 2
0
int read_iolog_get(struct thread_data *td, struct io_u *io_u)
{
    struct io_piece *ipo;

    while (!flist_empty(&td->io_log_list)) {
        int ret;

        ipo = flist_entry(td->io_log_list.next, struct io_piece, list);
        flist_del(&ipo->list);

        ret = ipo_special(td, ipo);
        if (ret < 0) {
            free(ipo);
            break;
        } else if (ret > 0) {
            free(ipo);
            continue;
        }

        io_u->offset = ipo->offset;
        io_u->buflen = ipo->len;
        io_u->ddir = ipo->ddir;
        io_u->file = td->files[ipo->fileno];
        get_file(io_u->file);

        dprint(FD_IO, "iolog: get %llu/%lu/%s\n", io_u->offset,
               io_u->buflen, io_u->file->file_name);

        if (ipo->delay)
            iolog_delay(td, ipo->delay);

        free(ipo);
        return 0;
    }

    td->done = 1;
    return 1;
}