linux/fs/btrfs/async-thread.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright (C) 2007 Oracle.  All rights reserved.
   4 * Copyright (C) 2014 Fujitsu.  All rights reserved.
   5 */
   6
   7#ifndef BTRFS_ASYNC_THREAD_H
   8#define BTRFS_ASYNC_THREAD_H
   9
  10#include <linux/workqueue.h>
  11
  12struct btrfs_fs_info;
  13struct btrfs_workqueue;
  14/* Internal use only */
  15struct __btrfs_workqueue;
  16struct btrfs_work;
  17typedef void (*btrfs_func_t)(struct btrfs_work *arg);
  18typedef void (*btrfs_work_func_t)(struct work_struct *arg);
  19
  20struct btrfs_work {
  21        btrfs_func_t func;
  22        btrfs_func_t ordered_func;
  23        btrfs_func_t ordered_free;
  24
  25        /* Don't touch things below */
  26        struct work_struct normal_work;
  27        struct list_head ordered_list;
  28        struct __btrfs_workqueue *wq;
  29        unsigned long flags;
  30};
  31
  32#define BTRFS_WORK_HELPER_PROTO(name)                                   \
  33void btrfs_##name(struct work_struct *arg)
  34
  35BTRFS_WORK_HELPER_PROTO(worker_helper);
  36BTRFS_WORK_HELPER_PROTO(delalloc_helper);
  37BTRFS_WORK_HELPER_PROTO(flush_delalloc_helper);
  38BTRFS_WORK_HELPER_PROTO(cache_helper);
  39BTRFS_WORK_HELPER_PROTO(submit_helper);
  40BTRFS_WORK_HELPER_PROTO(fixup_helper);
  41BTRFS_WORK_HELPER_PROTO(endio_helper);
  42BTRFS_WORK_HELPER_PROTO(endio_meta_helper);
  43BTRFS_WORK_HELPER_PROTO(endio_meta_write_helper);
  44BTRFS_WORK_HELPER_PROTO(endio_raid56_helper);
  45BTRFS_WORK_HELPER_PROTO(endio_repair_helper);
  46BTRFS_WORK_HELPER_PROTO(rmw_helper);
  47BTRFS_WORK_HELPER_PROTO(endio_write_helper);
  48BTRFS_WORK_HELPER_PROTO(freespace_write_helper);
  49BTRFS_WORK_HELPER_PROTO(delayed_meta_helper);
  50BTRFS_WORK_HELPER_PROTO(readahead_helper);
  51BTRFS_WORK_HELPER_PROTO(qgroup_rescan_helper);
  52BTRFS_WORK_HELPER_PROTO(extent_refs_helper);
  53BTRFS_WORK_HELPER_PROTO(scrub_helper);
  54BTRFS_WORK_HELPER_PROTO(scrubwrc_helper);
  55BTRFS_WORK_HELPER_PROTO(scrubnc_helper);
  56BTRFS_WORK_HELPER_PROTO(scrubparity_helper);
  57
  58
  59struct btrfs_workqueue *btrfs_alloc_workqueue(struct btrfs_fs_info *fs_info,
  60                                              const char *name,
  61                                              unsigned int flags,
  62                                              int limit_active,
  63                                              int thresh);
  64void btrfs_init_work(struct btrfs_work *work, btrfs_work_func_t helper,
  65                     btrfs_func_t func,
  66                     btrfs_func_t ordered_func,
  67                     btrfs_func_t ordered_free);
  68void btrfs_queue_work(struct btrfs_workqueue *wq,
  69                      struct btrfs_work *work);
  70void btrfs_destroy_workqueue(struct btrfs_workqueue *wq);
  71void btrfs_workqueue_set_max(struct btrfs_workqueue *wq, int max);
  72void btrfs_set_work_high_priority(struct btrfs_work *work);
  73struct btrfs_fs_info *btrfs_work_owner(const struct btrfs_work *work);
  74struct btrfs_fs_info *btrfs_workqueue_owner(const struct __btrfs_workqueue *wq);
  75bool btrfs_workqueue_normal_congested(const struct btrfs_workqueue *wq);
  76
  77#endif
  78