Lines Matching refs:s

165 tapdisk_stream_stop(struct tapdisk_stream *s)  in tapdisk_stream_stop()  argument
167 return (list_empty(&s->pending_list) && (s->cur == s->end || s->err)); in tapdisk_stream_stop()
178 tapdisk_stream_request_idx(struct tapdisk_stream *s, in tapdisk_stream_request_idx() argument
181 return (req - s->requests); in tapdisk_stream_request_idx()
185 tapdisk_stream_get_request(struct tapdisk_stream *s) in tapdisk_stream_get_request() argument
189 if (list_empty(&s->free_list)) in tapdisk_stream_get_request()
192 req = list_entry(s->free_list.next, in tapdisk_stream_get_request()
202 tapdisk_stream_print_request(struct tapdisk_stream *s, in tapdisk_stream_print_request() argument
205 unsigned long idx = (unsigned long)tapdisk_stream_request_idx(s, sreq); in tapdisk_stream_print_request()
206 char *buf = (char *)MMAP_VADDR(s->vbd->ring.vstart, idx, 0); in tapdisk_stream_print_request()
207 write_exact(s->out_fd, buf, sreq->secs << SECTOR_SHIFT); in tapdisk_stream_print_request()
211 tapdisk_stream_write_data(struct tapdisk_stream *s) in tapdisk_stream_write_data() argument
215 list_for_each_entry_safe(sreq, tmp, &s->completed_list, next) { in tapdisk_stream_write_data()
216 if (sreq->seqno != s->completed) in tapdisk_stream_write_data()
219 s->completed++; in tapdisk_stream_write_data()
220 tapdisk_stream_print_request(s, sreq); in tapdisk_stream_write_data()
223 list_add_tail(&sreq->next, &s->free_list); in tapdisk_stream_write_data()
228 tapdisk_stream_queue_completed(struct tapdisk_stream *s, in tapdisk_stream_queue_completed() argument
233 list_for_each_entry(itr, &s->completed_list, next) in tapdisk_stream_queue_completed()
239 list_add_tail(&sreq->next, &s->completed_list); in tapdisk_stream_queue_completed()
245 struct tapdisk_stream *s = (struct tapdisk_stream *)arg; in tapdisk_stream_dequeue() local
246 struct tapdisk_stream_request *sreq = s->requests + rsp->id; in tapdisk_stream_dequeue()
251 tapdisk_stream_queue_completed(s, sreq); in tapdisk_stream_dequeue()
253 s->err = EIO; in tapdisk_stream_dequeue()
254 list_add_tail(&sreq->next, &s->free_list); in tapdisk_stream_dequeue()
258 tapdisk_stream_write_data(s); in tapdisk_stream_dequeue()
259 tapdisk_stream_poll_set(&s->poll); in tapdisk_stream_dequeue()
267 struct tapdisk_stream *s = (struct tapdisk_stream *)arg; in tapdisk_stream_enqueue() local
269 vbd = s->vbd; in tapdisk_stream_enqueue()
270 tapdisk_stream_poll_clear(&s->poll); in tapdisk_stream_enqueue()
272 if (tapdisk_stream_stop(s)) { in tapdisk_stream_enqueue()
273 tapdisk_stream_close_image(s); in tapdisk_stream_enqueue()
279 while (s->cur < s->end && !s->err) { in tapdisk_stream_enqueue()
284 sreq = tapdisk_stream_get_request(s); in tapdisk_stream_enqueue()
288 idx = tapdisk_stream_request_idx(s, sreq); in tapdisk_stream_enqueue()
290 sreq->sec = s->cur; in tapdisk_stream_enqueue()
292 sreq->seqno = s->started++; in tapdisk_stream_enqueue()
301 uint32_t secs = MIN(s->end - s->cur, psize >> SECTOR_SHIFT); in tapdisk_stream_enqueue()
308 s->cur += secs; in tapdisk_stream_enqueue()
325 list_add_tail(&sreq->next, &s->pending_list); in tapdisk_stream_enqueue()
332 tapdisk_stream_open_image(struct tapdisk_stream *s, const char *path, int type) in tapdisk_stream_open_image() argument
336 s->id = tapdisk_stream_count++; in tapdisk_stream_open_image()
342 err = tapdisk_vbd_initialize(s->id); in tapdisk_stream_open_image()
346 s->vbd = tapdisk_server_get_vbd(s->id); in tapdisk_stream_open_image()
347 if (!s->vbd) { in tapdisk_stream_open_image()
352 tapdisk_vbd_set_callback(s->vbd, tapdisk_stream_dequeue, s); in tapdisk_stream_open_image()
354 err = tapdisk_vbd_open_vdi(s->vbd, path, type, in tapdisk_stream_open_image()
360 s->vbd->reopened = 1; in tapdisk_stream_open_image()
370 tapdisk_stream_close_image(struct tapdisk_stream *s) in tapdisk_stream_close_image() argument
374 vbd = tapdisk_server_get_vbd(s->id); in tapdisk_stream_close_image()
381 s->vbd = NULL; in tapdisk_stream_close_image()
386 tapdisk_stream_set_position(struct tapdisk_stream *s, in tapdisk_stream_set_position() argument
392 err = tapdisk_vbd_get_image_info(s->vbd, &image); in tapdisk_stream_set_position()
407 s->start = skip; in tapdisk_stream_set_position()
408 s->cur = s->start; in tapdisk_stream_set_position()
409 s->end = s->start + count; in tapdisk_stream_set_position()
415 tapdisk_stream_initialize_requests(struct tapdisk_stream *s) in tapdisk_stream_initialize_requests() argument
421 ring = &s->vbd->ring; in tapdisk_stream_initialize_requests()
434 struct tapdisk_stream_request *req = s->requests + i; in tapdisk_stream_initialize_requests()
436 list_add_tail(&req->next, &s->free_list); in tapdisk_stream_initialize_requests()
443 tapdisk_stream_register_enqueue_event(struct tapdisk_stream *s) in tapdisk_stream_register_enqueue_event() argument
446 struct tapdisk_stream_poll *p = &s->poll; in tapdisk_stream_register_enqueue_event()
454 tapdisk_stream_enqueue, s); in tapdisk_stream_register_enqueue_event()
458 s->enqueue_event_id = err; in tapdisk_stream_register_enqueue_event()
468 tapdisk_stream_unregister_enqueue_event(struct tapdisk_stream *s) in tapdisk_stream_unregister_enqueue_event() argument
470 if (s->enqueue_event_id) { in tapdisk_stream_unregister_enqueue_event()
471 tapdisk_server_unregister_event(s->enqueue_event_id); in tapdisk_stream_unregister_enqueue_event()
472 s->enqueue_event_id = 0; in tapdisk_stream_unregister_enqueue_event()
474 tapdisk_stream_poll_close(&s->poll); in tapdisk_stream_unregister_enqueue_event()
478 tapdisk_stream_initialize(struct tapdisk_stream *s) in tapdisk_stream_initialize() argument
480 memset(s, 0, sizeof(*s)); in tapdisk_stream_initialize()
481 s->in_fd = s->out_fd = -1; in tapdisk_stream_initialize()
482 INIT_LIST_HEAD(&s->free_list); in tapdisk_stream_initialize()
483 INIT_LIST_HEAD(&s->pending_list); in tapdisk_stream_initialize()
484 INIT_LIST_HEAD(&s->completed_list); in tapdisk_stream_initialize()
488 tapdisk_stream_open_fds(struct tapdisk_stream *s) in tapdisk_stream_open_fds() argument
490 s->out_fd = dup(STDOUT_FILENO); in tapdisk_stream_open_fds()
491 if (s->out_fd == -1) { in tapdisk_stream_open_fds()
500 tapdisk_stream_open(struct tapdisk_stream *s, const char *path, in tapdisk_stream_open() argument
505 tapdisk_stream_initialize(s); in tapdisk_stream_open()
507 err = tapdisk_stream_open_fds(s); in tapdisk_stream_open()
511 err = tapdisk_stream_open_image(s, path, type); in tapdisk_stream_open()
515 err = tapdisk_stream_set_position(s, count, skip); in tapdisk_stream_open()
519 err = tapdisk_stream_initialize_requests(s); in tapdisk_stream_open()
523 err = tapdisk_stream_register_enqueue_event(s); in tapdisk_stream_open()
531 tapdisk_stream_release(struct tapdisk_stream *s) in tapdisk_stream_release() argument
533 close(s->out_fd); in tapdisk_stream_release()
534 tapdisk_stream_close_image(s); in tapdisk_stream_release()
535 tapdisk_stream_unregister_enqueue_event(s); in tapdisk_stream_release()
539 tapdisk_stream_run(struct tapdisk_stream *s) in tapdisk_stream_run() argument
541 tapdisk_stream_enqueue(s->enqueue_event_id, SCHEDULER_POLL_READ_FD, s); in tapdisk_stream_run()
543 return s->err; in tapdisk_stream_run()