bcachefs: thread_with_stdio: fix spinning instead of exiting
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 4 May 2025 17:50:09 +0000 (13:50 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 4 May 2025 18:00:14 +0000 (14:00 -0400)
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: Jan Solanti <jhs@psonet.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/thread_with_file.c

index dea73bc..314a24d 100644 (file)
@@ -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);