Lines Matching refs:buf
72 return stdio->input.buf.nr > seen || stdio->done; in stdio_redirect_has_more_input()
82 return stdio->output.buf.nr || stdio->done; in stdio_redirect_has_output()
89 return stdio->input.buf.nr < STDIO_REDIRECT_BUFSIZE || stdio->done; in stdio_redirect_has_input_space()
94 return stdio->output.buf.nr < STDIO_REDIRECT_BUFSIZE || stdio->done; in stdio_redirect_has_output_space()
97 static void stdio_buf_init(struct stdio_buf *buf) in stdio_buf_init() argument
99 spin_lock_init(&buf->lock); in stdio_buf_init()
100 init_waitqueue_head(&buf->wait); in stdio_buf_init()
101 darray_init(&buf->buf); in stdio_buf_init()
119 struct stdio_buf *buf = &thr->stdio.output; in thread_with_stdio_read() local
124 ret = wait_event_interruptible(buf->wait, stdio_redirect_has_output(&thr->stdio)); in thread_with_stdio_read()
130 while (len && buf->buf.nr) { in thread_with_stdio_read()
136 spin_lock_irq(&buf->lock); in thread_with_stdio_read()
137 b = min_t(size_t, len, buf->buf.nr); in thread_with_stdio_read()
139 if (b && !copy_to_user_nofault(ubuf, buf->buf.data, b)) { in thread_with_stdio_read()
143 buf->buf.nr -= b; in thread_with_stdio_read()
144 memmove(buf->buf.data, in thread_with_stdio_read()
145 buf->buf.data + b, in thread_with_stdio_read()
146 buf->buf.nr); in thread_with_stdio_read()
148 spin_unlock_irq(&buf->lock); 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() local
188 spin_lock(&buf->lock); in thread_with_stdio_write()
190 if (!buf->waiting_for_line || memchr(buf->buf.data, '\n', buf->buf.nr)) in thread_with_stdio_write()
192 max_t(ssize_t, STDIO_REDIRECT_BUFSIZE - buf->buf.nr, in thread_with_stdio_write()
194 darray_make_room_gfp(&buf->buf, makeroom, GFP_NOWAIT); in thread_with_stdio_write()
196 b = min(len, darray_room(buf->buf)); in thread_with_stdio_write()
198 if (b && !copy_from_user_nofault(&darray_top(buf->buf), ubuf, b)) { in thread_with_stdio_write()
199 buf->buf.nr += b; in thread_with_stdio_write()
204 spin_unlock(&buf->lock); in thread_with_stdio_write()
207 wake_up(&buf->wait); in thread_with_stdio_write()
214 ret = wait_event_interruptible(buf->wait, in thread_with_stdio_write()
338 struct stdio_buf *buf = &stdio->input; in bch2_stdio_redirect_read() local
345 wait_event_timeout(buf->wait, stdio_redirect_has_input(stdio), in bch2_stdio_redirect_read()
352 spin_lock(&buf->lock); in bch2_stdio_redirect_read()
353 int ret = min(len, buf->buf.nr); in bch2_stdio_redirect_read()
354 buf->buf.nr -= ret; in bch2_stdio_redirect_read()
355 memcpy(ubuf, buf->buf.data, ret); in bch2_stdio_redirect_read()
356 memmove(buf->buf.data, in bch2_stdio_redirect_read()
357 buf->buf.data + ret, in bch2_stdio_redirect_read()
358 buf->buf.nr); in bch2_stdio_redirect_read()
359 spin_unlock(&buf->lock); in bch2_stdio_redirect_read()
361 wake_up(&buf->wait); in bch2_stdio_redirect_read()
370 struct stdio_buf *buf = &stdio->input; in bch2_stdio_redirect_readline_timeout() local
379 wait_event_timeout(buf->wait, stdio_redirect_has_more_input(stdio, seen), t); in bch2_stdio_redirect_readline_timeout()
384 spin_lock(&buf->lock); in bch2_stdio_redirect_readline_timeout()
385 seen = buf->buf.nr; in bch2_stdio_redirect_readline_timeout()
386 char *n = memchr(buf->buf.data, '\n', seen); in bch2_stdio_redirect_readline_timeout()
389 spin_unlock(&buf->lock); in bch2_stdio_redirect_readline_timeout()
394 buf->waiting_for_line = true; in bch2_stdio_redirect_readline_timeout()
395 spin_unlock(&buf->lock); in bch2_stdio_redirect_readline_timeout()
399 size_t b = n + 1 - buf->buf.data; in bch2_stdio_redirect_readline_timeout()
401 spin_unlock(&buf->lock); in bch2_stdio_redirect_readline_timeout()
409 buf->buf.nr -= b; in bch2_stdio_redirect_readline_timeout()
410 memcpy(line->data, buf->buf.data, b); in bch2_stdio_redirect_readline_timeout()
411 memmove(buf->buf.data, in bch2_stdio_redirect_readline_timeout()
412 buf->buf.data + b, in bch2_stdio_redirect_readline_timeout()
413 buf->buf.nr); in bch2_stdio_redirect_readline_timeout()
416 buf->waiting_for_line = false; in bch2_stdio_redirect_readline_timeout()
417 spin_unlock(&buf->lock); in bch2_stdio_redirect_readline_timeout()
419 wake_up(&buf->wait); in bch2_stdio_redirect_readline_timeout()
455 struct stdio_buf *buf = &stdio->output; in bch2_stdio_redirect_vprintf() local
462 spin_lock_irqsave(&buf->lock, flags); in bch2_stdio_redirect_vprintf()
463 ret = bch2_darray_vprintf(&buf->buf, GFP_NOWAIT, fmt, args); in bch2_stdio_redirect_vprintf()
464 spin_unlock_irqrestore(&buf->lock, flags); in bch2_stdio_redirect_vprintf()
470 ret = wait_event_interruptible(buf->wait, in bch2_stdio_redirect_vprintf()
477 wake_up(&buf->wait); in bch2_stdio_redirect_vprintf()