Lines Matching refs:stdio
70 static bool stdio_redirect_has_more_input(struct stdio_redirect *stdio, size_t seen) in stdio_redirect_has_more_input() argument
72 return stdio->input.buf.nr > seen || stdio->done; in stdio_redirect_has_more_input()
75 static bool stdio_redirect_has_input(struct stdio_redirect *stdio) in stdio_redirect_has_input() argument
77 return stdio_redirect_has_more_input(stdio, 0); in stdio_redirect_has_input()
80 static bool stdio_redirect_has_output(struct stdio_redirect *stdio) in stdio_redirect_has_output() argument
82 return stdio->output.buf.nr || stdio->done; in stdio_redirect_has_output()
87 static bool stdio_redirect_has_input_space(struct stdio_redirect *stdio) in stdio_redirect_has_input_space() argument
89 return stdio->input.buf.nr < STDIO_REDIRECT_BUFSIZE || stdio->done; in stdio_redirect_has_input_space()
92 static bool stdio_redirect_has_output_space(struct stdio_redirect *stdio) in stdio_redirect_has_output_space() argument
94 return stdio->output.buf.nr < STDIO_REDIRECT_BUFSIZE || stdio->done; in stdio_redirect_has_output_space()
109 thr->stdio.done = true; in thread_with_stdio_done()
110 wake_up(&thr->stdio.input.wait); in thread_with_stdio_done()
111 wake_up(&thr->stdio.output.wait); in thread_with_stdio_done()
119 struct stdio_buf *buf = &thr->stdio.output; in thread_with_stdio_read()
124 ret = wait_event_interruptible(buf->wait, stdio_redirect_has_output(&thr->stdio)); in thread_with_stdio_read()
127 } else if (!stdio_redirect_has_output(&thr->stdio)) in thread_with_stdio_read()
161 darray_exit(&thr->stdio.input.buf); in thread_with_stdio_release()
162 darray_exit(&thr->stdio.output.buf); in thread_with_stdio_release()
172 struct stdio_buf *buf = &thr->stdio.input; in thread_with_stdio_write()
215 stdio_redirect_has_input_space(&thr->stdio)); in thread_with_stdio_write()
229 poll_wait(file, &thr->stdio.output.wait, wait); in thread_with_stdio_poll()
230 poll_wait(file, &thr->stdio.input.wait, wait); in thread_with_stdio_poll()
234 if (stdio_redirect_has_output(&thr->stdio)) in thread_with_stdio_poll()
236 if (stdio_redirect_has_input_space(&thr->stdio)) in thread_with_stdio_poll()
248 poll_wait(file, &thr->stdio.output.wait, wait); in thread_with_stdout_poll()
252 if (stdio_redirect_has_output(&thr->stdio)) in thread_with_stdout_poll()
307 stdio_buf_init(&thr->stdio.input); in bch2_thread_with_stdio_init()
308 stdio_buf_init(&thr->stdio.output); in bch2_thread_with_stdio_init()
328 stdio_buf_init(&thr->stdio.input); in bch2_run_thread_with_stdout()
329 stdio_buf_init(&thr->stdio.output); in bch2_run_thread_with_stdout()
336 int bch2_stdio_redirect_read(struct stdio_redirect *stdio, char *ubuf, size_t len) in bch2_stdio_redirect_read() argument
338 struct stdio_buf *buf = &stdio->input; in bch2_stdio_redirect_read()
345 wait_event_timeout(buf->wait, stdio_redirect_has_input(stdio), in bch2_stdio_redirect_read()
347 } while (!stdio_redirect_has_input(stdio)); in bch2_stdio_redirect_read()
349 if (stdio->done) in bch2_stdio_redirect_read()
365 int bch2_stdio_redirect_readline_timeout(struct stdio_redirect *stdio, in bch2_stdio_redirect_readline_timeout() argument
370 struct stdio_buf *buf = &stdio->input; in bch2_stdio_redirect_readline_timeout()
379 wait_event_timeout(buf->wait, stdio_redirect_has_more_input(stdio, seen), t); in bch2_stdio_redirect_readline_timeout()
381 if (stdio->done) in bch2_stdio_redirect_readline_timeout()
423 int bch2_stdio_redirect_readline(struct stdio_redirect *stdio, darray_char *line) in bch2_stdio_redirect_readline() argument
425 return bch2_stdio_redirect_readline_timeout(stdio, line, MAX_SCHEDULE_TIMEOUT); in bch2_stdio_redirect_readline()
452 ssize_t bch2_stdio_redirect_vprintf(struct stdio_redirect *stdio, bool nonblocking, in bch2_stdio_redirect_vprintf() argument
455 struct stdio_buf *buf = &stdio->output; in bch2_stdio_redirect_vprintf()
469 stdio_redirect_has_output_space(stdio)); in bch2_stdio_redirect_vprintf()
479 ssize_t bch2_stdio_redirect_printf(struct stdio_redirect *stdio, bool nonblocking, in bch2_stdio_redirect_printf() argument
486 ret = bch2_stdio_redirect_vprintf(stdio, nonblocking, fmt, args); in bch2_stdio_redirect_printf()