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