summaryrefslogtreecommitdiff
path: root/fs/bcachefs/thread_with_file.h
blob: 05879c5048c875b9df186a4cfb6a5866ddb36428 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* 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 */