brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · c0ef81f Raw
60 lines · c
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 9struct xfs_pwork;10struct xfs_mount;11 12typedef int (*xfs_pwork_work_fn)(struct xfs_mount *mp, struct xfs_pwork *pwork);13 14/*15 * Parallel work coordination structure.16 */17struct 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 */30struct 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? */38static inline bool39xfs_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? */46static inline bool47xfs_pwork_want_abort(48	struct xfs_pwork	*pwork)49{50	return xfs_pwork_ctl_want_abort(pwork->pctl);51}52 53int xfs_pwork_init(struct xfs_mount *mp, struct xfs_pwork_ctl *pctl,54		xfs_pwork_work_fn work_fn, const char *tag);55void xfs_pwork_queue(struct xfs_pwork_ctl *pctl, struct xfs_pwork *pwork);56int xfs_pwork_destroy(struct xfs_pwork_ctl *pctl);57void xfs_pwork_poll(struct xfs_pwork_ctl *pctl);58 59#endif /* __XFS_PWORK_H__ */60