Commit df2e19a8 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: thread_with_stdio: fix spinning instead of exiting



bch2_stdio_redirect_vprintf() was missing a check for stdio->done, i.e.
exiting.

This caused the thread attempting to print to spin, and since it was
being called from the kthread ran by thread_with_stdio, the userspace
side hung as well.

Change it to return -EPIPE - i.e. writing to a pipe that's been closed.

Reported-by: default avatarJan Solanti <jhs@psonet.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 6846100b
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -455,8 +455,10 @@ ssize_t bch2_stdio_redirect_vprintf(struct stdio_redirect *stdio, bool nonblocki
	struct stdio_buf *buf = &stdio->output;
	unsigned long flags;
	ssize_t ret;

again:
	if (stdio->done)
		return -EPIPE;

	spin_lock_irqsave(&buf->lock, flags);
	ret = bch2_darray_vprintf(&buf->buf, GFP_NOWAIT, fmt, args);
	spin_unlock_irqrestore(&buf->lock, flags);