#include <linux/module.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/slab.h>
#include <linux/mempool.h>
#include <linux/smp.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/freezer.h>
#include <linux/sched/mm.h>
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/metrics.h>
#include "sunrpc.h"
#define CREATE_TRACE_POINTS
#include <trace/events/sunrpc.h>
#define RPC_BUFFER_MAXSIZE …
#define RPC_BUFFER_POOLSIZE …
#define RPC_TASK_POOLSIZE …
static struct kmem_cache *rpc_task_slabp __read_mostly;
static struct kmem_cache *rpc_buffer_slabp __read_mostly;
static mempool_t *rpc_task_mempool __read_mostly;
static mempool_t *rpc_buffer_mempool __read_mostly;
static void rpc_async_schedule(struct work_struct *);
static void rpc_release_task(struct rpc_task *task);
static void __rpc_queue_timer_fn(struct work_struct *);
static struct rpc_wait_queue delay_queue;
struct workqueue_struct *rpciod_workqueue __read_mostly;
struct workqueue_struct *xprtiod_workqueue __read_mostly;
EXPORT_SYMBOL_GPL(…);
gfp_t rpc_task_gfp_mask(void)
{ … }
EXPORT_SYMBOL_GPL(…);
bool rpc_task_set_rpc_status(struct rpc_task *task, int rpc_status)
{ … }
unsigned long
rpc_task_timeout(const struct rpc_task *task)
{ … }
EXPORT_SYMBOL_GPL(…);
static void
__rpc_disable_timer(struct rpc_wait_queue *queue, struct rpc_task *task)
{ … }
static void
rpc_set_queue_timer(struct rpc_wait_queue *queue, unsigned long expires)
{ … }
static void
__rpc_add_timer(struct rpc_wait_queue *queue, struct rpc_task *task,
unsigned long timeout)
{ … }
static void rpc_set_waitqueue_priority(struct rpc_wait_queue *queue, int priority)
{ … }
static void rpc_reset_waitqueue_priority(struct rpc_wait_queue *queue)
{ … }
static void
__rpc_list_enqueue_task(struct list_head *q, struct rpc_task *task)
{ … }
static void
__rpc_list_dequeue_task(struct rpc_task *task)
{ … }
static void __rpc_add_wait_queue_priority(struct rpc_wait_queue *queue,
struct rpc_task *task,
unsigned char queue_priority)
{ … }
static void __rpc_add_wait_queue(struct rpc_wait_queue *queue,
struct rpc_task *task,
unsigned char queue_priority)
{ … }
static void __rpc_remove_wait_queue_priority(struct rpc_task *task)
{ … }
static void __rpc_remove_wait_queue(struct rpc_wait_queue *queue, struct rpc_task *task)
{ … }
static void __rpc_init_priority_wait_queue(struct rpc_wait_queue *queue, const char *qname, unsigned char nr_queues)
{ … }
void rpc_init_priority_wait_queue(struct rpc_wait_queue *queue, const char *qname)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_init_wait_queue(struct rpc_wait_queue *queue, const char *qname)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_destroy_wait_queue(struct rpc_wait_queue *queue)
{ … }
EXPORT_SYMBOL_GPL(…);
static int rpc_wait_bit_killable(struct wait_bit_key *key, int mode)
{ … }
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG) || IS_ENABLED(CONFIG_TRACEPOINTS)
static void rpc_task_set_debuginfo(struct rpc_task *task)
{ … }
#else
static inline void rpc_task_set_debuginfo(struct rpc_task *task)
{
}
#endif
static void rpc_set_active(struct rpc_task *task)
{ … }
static int rpc_complete_task(struct rpc_task *task)
{ … }
int rpc_wait_for_completion_task(struct rpc_task *task)
{ … }
EXPORT_SYMBOL_GPL(…);
static void rpc_make_runnable(struct workqueue_struct *wq,
struct rpc_task *task)
{ … }
static void __rpc_do_sleep_on_priority(struct rpc_wait_queue *q,
struct rpc_task *task,
unsigned char queue_priority)
{ … }
static void __rpc_sleep_on_priority(struct rpc_wait_queue *q,
struct rpc_task *task,
unsigned char queue_priority)
{ … }
static void __rpc_sleep_on_priority_timeout(struct rpc_wait_queue *q,
struct rpc_task *task, unsigned long timeout,
unsigned char queue_priority)
{ … }
static void rpc_set_tk_callback(struct rpc_task *task, rpc_action action)
{ … }
static bool rpc_sleep_check_activated(struct rpc_task *task)
{ … }
void rpc_sleep_on_timeout(struct rpc_wait_queue *q, struct rpc_task *task,
rpc_action action, unsigned long timeout)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_sleep_on(struct rpc_wait_queue *q, struct rpc_task *task,
rpc_action action)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_sleep_on_priority_timeout(struct rpc_wait_queue *q,
struct rpc_task *task, unsigned long timeout, int priority)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_sleep_on_priority(struct rpc_wait_queue *q, struct rpc_task *task,
int priority)
{ … }
EXPORT_SYMBOL_GPL(…);
static void __rpc_do_wake_up_task_on_wq(struct workqueue_struct *wq,
struct rpc_wait_queue *queue,
struct rpc_task *task)
{ … }
static struct rpc_task *
rpc_wake_up_task_on_wq_queue_action_locked(struct workqueue_struct *wq,
struct rpc_wait_queue *queue, struct rpc_task *task,
bool (*action)(struct rpc_task *, void *), void *data)
{ … }
static void rpc_wake_up_task_queue_locked(struct rpc_wait_queue *queue,
struct rpc_task *task)
{ … }
void rpc_wake_up_queued_task(struct rpc_wait_queue *queue, struct rpc_task *task)
{ … }
EXPORT_SYMBOL_GPL(…);
static bool rpc_task_action_set_status(struct rpc_task *task, void *status)
{ … }
static void
rpc_wake_up_task_queue_set_status_locked(struct rpc_wait_queue *queue,
struct rpc_task *task, int status)
{ … }
void
rpc_wake_up_queued_task_set_status(struct rpc_wait_queue *queue,
struct rpc_task *task, int status)
{ … }
static struct rpc_task *__rpc_find_next_queued_priority(struct rpc_wait_queue *queue)
{ … }
static struct rpc_task *__rpc_find_next_queued(struct rpc_wait_queue *queue)
{ … }
struct rpc_task *rpc_wake_up_first_on_wq(struct workqueue_struct *wq,
struct rpc_wait_queue *queue,
bool (*func)(struct rpc_task *, void *), void *data)
{ … }
struct rpc_task *rpc_wake_up_first(struct rpc_wait_queue *queue,
bool (*func)(struct rpc_task *, void *), void *data)
{ … }
EXPORT_SYMBOL_GPL(…);
static bool rpc_wake_up_next_func(struct rpc_task *task, void *data)
{ … }
struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *queue)
{ … }
EXPORT_SYMBOL_GPL(…);
static void rpc_wake_up_locked(struct rpc_wait_queue *queue)
{ … }
void rpc_wake_up(struct rpc_wait_queue *queue)
{ … }
EXPORT_SYMBOL_GPL(…);
static void rpc_wake_up_status_locked(struct rpc_wait_queue *queue, int status)
{ … }
void rpc_wake_up_status(struct rpc_wait_queue *queue, int status)
{ … }
EXPORT_SYMBOL_GPL(…);
static void __rpc_queue_timer_fn(struct work_struct *work)
{ … }
static void __rpc_atrun(struct rpc_task *task)
{ … }
void rpc_delay(struct rpc_task *task, unsigned long delay)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_prepare_task(struct rpc_task *task)
{ … }
static void
rpc_init_task_statistics(struct rpc_task *task)
{ … }
static void
rpc_reset_task_statistics(struct rpc_task *task)
{ … }
void rpc_exit_task(struct rpc_task *task)
{ … }
void rpc_signal_task(struct rpc_task *task)
{ … }
void rpc_task_try_cancel(struct rpc_task *task, int error)
{ … }
void rpc_exit(struct rpc_task *task, int status)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_release_calldata(const struct rpc_call_ops *ops, void *calldata)
{ … }
static bool xprt_needs_memalloc(struct rpc_xprt *xprt, struct rpc_task *tk)
{ … }
static void __rpc_execute(struct rpc_task *task)
{ … }
void rpc_execute(struct rpc_task *task)
{ … }
static void rpc_async_schedule(struct work_struct *work)
{ … }
int rpc_malloc(struct rpc_task *task)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_free(struct rpc_task *task)
{ … }
EXPORT_SYMBOL_GPL(…);
static void rpc_init_task(struct rpc_task *task, const struct rpc_task_setup *task_setup_data)
{ … }
static struct rpc_task *rpc_alloc_task(void)
{ … }
struct rpc_task *rpc_new_task(const struct rpc_task_setup *setup_data)
{ … }
static void rpc_free_task(struct rpc_task *task)
{ … }
static void rpc_async_release(struct work_struct *work)
{ … }
static void rpc_release_resources_task(struct rpc_task *task)
{ … }
static void rpc_final_put_task(struct rpc_task *task,
struct workqueue_struct *q)
{ … }
static void rpc_do_put_task(struct rpc_task *task, struct workqueue_struct *q)
{ … }
void rpc_put_task(struct rpc_task *task)
{ … }
EXPORT_SYMBOL_GPL(…);
void rpc_put_task_async(struct rpc_task *task)
{ … }
EXPORT_SYMBOL_GPL(…);
static void rpc_release_task(struct rpc_task *task)
{ … }
int rpciod_up(void)
{ … }
void rpciod_down(void)
{ … }
static int rpciod_start(void)
{ … }
static void rpciod_stop(void)
{ … }
void
rpc_destroy_mempool(void)
{ … }
int
rpc_init_mempool(void)
{ … }