]>
Commit | Line | Data |
---|---|---|
40786717 DW |
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* | |
3 | * Copyright (C) 2019 Oracle. All Rights Reserved. | |
4 | * Author: Darrick J. Wong <[email protected]> | |
5 | */ | |
6 | #ifndef __XFS_PWORK_H__ | |
7 | #define __XFS_PWORK_H__ | |
8 | ||
9 | struct xfs_pwork; | |
10 | struct xfs_mount; | |
11 | ||
12 | typedef int (*xfs_pwork_work_fn)(struct xfs_mount *mp, struct xfs_pwork *pwork); | |
13 | ||
14 | /* | |
15 | * Parallel work coordination structure. | |
16 | */ | |
17 | struct xfs_pwork_ctl { | |
18 | struct workqueue_struct *wq; | |
19 | struct xfs_mount *mp; | |
20 | xfs_pwork_work_fn work_fn; | |
3e5a428b DW |
21 | struct wait_queue_head poll_wait; |
22 | atomic_t nr_work; | |
40786717 DW |
23 | int error; |
24 | }; | |
25 | ||
26 | /* | |
27 | * Embed this parallel work control item inside your own work structure, | |
28 | * then queue work with it. | |
29 | */ | |
30 | struct xfs_pwork { | |
31 | struct work_struct work; | |
32 | struct xfs_pwork_ctl *pctl; | |
33 | }; | |
34 | ||
35 | #define XFS_PWORK_SINGLE_THREADED { .pctl = NULL } | |
36 | ||
37 | /* Have we been told to abort? */ | |
38 | static inline bool | |
39 | xfs_pwork_ctl_want_abort( | |
40 | struct xfs_pwork_ctl *pctl) | |
41 | { | |
42 | return pctl && pctl->error; | |
43 | } | |
44 | ||
45 | /* Have we been told to abort? */ | |
46 | static inline bool | |
47 | xfs_pwork_want_abort( | |
48 | struct xfs_pwork *pwork) | |
49 | { | |
50 | return xfs_pwork_ctl_want_abort(pwork->pctl); | |
51 | } | |
52 | ||
53 | int xfs_pwork_init(struct xfs_mount *mp, struct xfs_pwork_ctl *pctl, | |
54 | xfs_pwork_work_fn work_fn, const char *tag, | |
55 | unsigned int nr_threads); | |
56 | void xfs_pwork_queue(struct xfs_pwork_ctl *pctl, struct xfs_pwork *pwork); | |
57 | int xfs_pwork_destroy(struct xfs_pwork_ctl *pctl); | |
3e5a428b | 58 | void xfs_pwork_poll(struct xfs_pwork_ctl *pctl); |
40786717 DW |
59 | unsigned int xfs_pwork_guess_datadev_parallelism(struct xfs_mount *mp); |
60 | ||
61 | #endif /* __XFS_PWORK_H__ */ |