| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _BCACHEFS_THREAD_WITH_FILE_H |
| #define _BCACHEFS_THREAD_WITH_FILE_H |
| |
| #include "thread_with_file_types.h" |
| |
| struct task_struct; |
| |
| struct thread_with_file { |
| struct task_struct *task; |
| int ret; |
| bool done; |
| }; |
| |
| void bch2_thread_with_file_exit(struct thread_with_file *); |
| int bch2_run_thread_with_file(struct thread_with_file *, |
| const struct file_operations *, |
| int (*fn)(void *)); |
| |
| struct thread_with_stdio { |
| struct thread_with_file thr; |
| struct stdio_redirect stdio; |
| DARRAY(char) output2; |
| void (*exit)(struct thread_with_stdio *); |
| }; |
| |
| static inline void thread_with_stdio_done(struct thread_with_stdio *thr) |
| { |
| thr->thr.done = true; |
| thr->stdio.done = true; |
| wake_up(&thr->stdio.input_wait); |
| wake_up(&thr->stdio.output_wait); |
| } |
| |
| int bch2_run_thread_with_stdio(struct thread_with_stdio *, |
| void (*exit)(struct thread_with_stdio *), |
| int (*fn)(void *)); |
| int bch2_stdio_redirect_read(struct stdio_redirect *, char *, size_t); |
| int bch2_stdio_redirect_readline(struct stdio_redirect *, char *, size_t); |
| |
| #endif /* _BCACHEFS_THREAD_WITH_FILE_H */ |