void put_io_u(struct thread_data *td, struct io_u *io_u) { td_io_u_lock(td); if (io_u->file && !(io_u->flags & IO_U_F_FREE_DEF)) put_file_log(td, io_u->file); io_u->file = NULL; io_u->flags &= ~IO_U_F_FREE_DEF; io_u->flags |= IO_U_F_FREE; if (io_u->flags & IO_U_F_IN_CUR_DEPTH) td->cur_depth--; flist_del_init(&io_u->list); flist_add(&io_u->list, &td->io_u_freelist); td_io_u_unlock(td); td_io_u_free_notify(td); }
static int get_next_rand_offset(struct thread_data *td, struct fio_file *f, enum fio_ddir ddir, uint64_t *b) { struct rand_off *r; int i, ret = 1; if (!should_sort_io(td)) return get_off_from_method(td, f, ddir, b); if (!flist_empty(&td->next_rand_list)) { struct rand_off *r; fetch: r = flist_entry(td->next_rand_list.next, struct rand_off, list); flist_del(&r->list); *b = r->off; free(r); return 0; } for (i = 0; i < td->o.verifysort_nr; i++) { r = malloc(sizeof(*r)); ret = get_off_from_method(td, f, ddir, &r->off); if (ret) { free(r); break; } flist_add(&r->list, &td->next_rand_list); } if (ret && !i) return ret; assert(!flist_empty(&td->next_rand_list)); flist_sort(NULL, &td->next_rand_list, flist_cmp); goto fetch; }
int parse_index_options(IndexOptions *o, char **argv) { int i,j; SGREPDATA(o); i=0; j=1; while ( *argv!=NULL && *argv[0]=='-' ) { /* option -- means no more options */ if (strcmp(*argv,"--")==0) return i+1; switch((*argv)[j]) { case 'g': { char *arg; arg=get_arg(sgrep,&argv,&i,&j); if ((!arg) || set_scanner_option(o->sgrep,arg)==SGREP_ERROR) { return SGREP_ERROR; } break; } case 'h': print_index_help(); o->index_mode=IM_DONE; break; case 'i': o->sgrep->ignore_case=1; break; case 'l': { char *endptr; char *arg=get_arg(sgrep,&argv,&i,&j); if (!arg) return SGREP_ERROR; o->stop_word_limit=strtol(arg,&endptr,10); if (o->stop_word_limit<0 || *endptr!=0) { sgrep_error(sgrep,"Invalid stop word limit '%s'\n", arg); return SGREP_ERROR; } break; } case 'm': { char *endptr; char *arg=get_arg(sgrep,&argv,&i,&j); if (!arg) return SGREP_ERROR; o->available_memory=strtol(arg,&endptr,10)*1024*1024; if (o->available_memory<0 || *endptr!=0) { sgrep_error(sgrep,"Invalid memory size '%s'\n", arg); return SGREP_ERROR; } break; } case 'L': o->output_stop_word_file=get_arg(sgrep,&argv,&i,&j); if (!o->output_stop_word_file) return SGREP_ERROR; break; case 'S': o->input_stop_word_file=get_arg(sgrep,&argv,&i,&j); if (!o->input_stop_word_file) return SGREP_ERROR; break; case 'V': printf("sgindex version %s compiled at %s\n", VERSION,__DATE__); o->index_mode=IM_DONE; break; case 'v': o->sgrep->progress_output=1; break; case 'T': o->index_stats=1; break; #if 0 case 'C': copyright_notice(); o->index_mode=IM_DONE; break; #endif case 'R': o->sgrep->recurse_dirs=1; sgrep_error(sgrep,"WARNING -R not working (yet)\n"); break; case 'c': o->file_name=get_arg(sgrep,&argv,&i,&j); if (o->file_name==NULL) return SGREP_ERROR; o->index_mode=IM_CREATE; break; case 'x': o->sgrep->index_file=get_arg(sgrep,&argv,&i,&j); if (o->sgrep->index_file==NULL) return SGREP_ERROR; break; case 'q': { const char *arg=get_arg(sgrep,&argv,&i,&j); if (strcmp(arg,"terms")==0) { o->index_mode=IM_TERMS; } else { sgrep_error(sgrep,"Don't know how to query '%s'\n", arg); return SGREP_ERROR; } break; } case 'F': { char *arg; arg=get_arg(sgrep,&argv,&i,&j); if (arg==NULL) return SGREP_ERROR; if (o->file_list_files==NULL) { o->file_list_files=new_flist(sgrep); } flist_add(o->file_list_files,arg); break; } case 'w': o->sgrep->word_chars=get_arg(sgrep,&argv,&i,&j); if (!o->sgrep->word_chars) return SGREP_ERROR; break; default: sgrep_error(sgrep,"Illegal option -%c\n",(*argv)[j]); return SGREP_ERROR; break; } if ((*argv)[++j]==0) { argv++; i++; j=1; } } return i; }