root/fs/xfs/xfs_pwork.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xfs_pwork_ctl_want_abort
  2. xfs_pwork_want_abort

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  * Copyright (C) 2019 Oracle.  All Rights Reserved.
   4  * Author: Darrick J. Wong <darrick.wong@oracle.com>
   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;
  21         struct wait_queue_head  poll_wait;
  22         atomic_t                nr_work;
  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);
  58 void xfs_pwork_poll(struct xfs_pwork_ctl *pctl);
  59 unsigned int xfs_pwork_guess_datadev_parallelism(struct xfs_mount *mp);
  60 
  61 #endif /* __XFS_PWORK_H__ */

/* [<][>][^][v][top][bottom][index][help] */