Merge tag 'cgroup-for-6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
[linux-block.git] / fs / netfs / internal.h
CommitLineData
3d3c9504
DH
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/* Internal definitions for network filesystem support
3 *
4 * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
6 */
7
3a4a38e6 8#include <linux/netfs.h>
bc899ee1 9#include <linux/fscache.h>
3a4a38e6
DH
10#include <trace/events/netfs.h>
11
3d3c9504
DH
12#ifdef pr_fmt
13#undef pr_fmt
14#endif
15
16#define pr_fmt(fmt) "netfs: " fmt
17
93345c3b
DH
18/*
19 * buffered_read.c
20 */
21void netfs_rreq_unlock_folios(struct netfs_io_request *rreq);
22
3be01750
DH
23/*
24 * io.c
25 */
3be01750
DH
26int netfs_begin_read(struct netfs_io_request *rreq, bool sync);
27
b900f4b8
DH
28/*
29 * main.c
30 */
31extern unsigned int netfs_debug;
32
3a4a38e6
DH
33/*
34 * objects.c
35 */
663dfb65
DH
36struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,
37 struct file *file,
663dfb65
DH
38 loff_t start, size_t len,
39 enum netfs_io_origin origin);
de74023b 40void netfs_get_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace what);
3a4a38e6 41void netfs_clear_subrequests(struct netfs_io_request *rreq, bool was_async);
de74023b
DH
42void netfs_put_request(struct netfs_io_request *rreq, bool was_async,
43 enum netfs_rreq_ref_trace what);
3a4a38e6 44struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq);
3a4a38e6 45
de74023b
DH
46static inline void netfs_see_request(struct netfs_io_request *rreq,
47 enum netfs_rreq_ref_trace what)
48{
49 trace_netfs_rreq_ref(rreq->debug_id, refcount_read(&rreq->ref), what);
50}
51
289af54c
DH
52/*
53 * stats.c
54 */
55#ifdef CONFIG_NETFS_STATS
56extern atomic_t netfs_n_rh_readahead;
57extern atomic_t netfs_n_rh_readpage;
58extern atomic_t netfs_n_rh_rreq;
59extern atomic_t netfs_n_rh_sreq;
60extern atomic_t netfs_n_rh_download;
61extern atomic_t netfs_n_rh_download_done;
62extern atomic_t netfs_n_rh_download_failed;
63extern atomic_t netfs_n_rh_download_instead;
64extern atomic_t netfs_n_rh_read;
65extern atomic_t netfs_n_rh_read_done;
66extern atomic_t netfs_n_rh_read_failed;
67extern atomic_t netfs_n_rh_zero;
68extern atomic_t netfs_n_rh_short_read;
69extern atomic_t netfs_n_rh_write;
e1b1240c 70extern atomic_t netfs_n_rh_write_begin;
289af54c
DH
71extern atomic_t netfs_n_rh_write_done;
72extern atomic_t netfs_n_rh_write_failed;
e1b1240c 73extern atomic_t netfs_n_rh_write_zskip;
289af54c
DH
74
75
76static inline void netfs_stat(atomic_t *stat)
77{
78 atomic_inc(stat);
79}
80
81static inline void netfs_stat_d(atomic_t *stat)
82{
83 atomic_dec(stat);
84}
85
86#else
3d3c9504
DH
87#define netfs_stat(x) do {} while(0)
88#define netfs_stat_d(x) do {} while(0)
289af54c 89#endif
3d3c9504 90
bc899ee1
DH
91/*
92 * Miscellaneous functions.
93 */
874c8ca1 94static inline bool netfs_is_cache_enabled(struct netfs_inode *ctx)
bc899ee1
DH
95{
96#if IS_ENABLED(CONFIG_FSCACHE)
97 struct fscache_cookie *cookie = ctx->cache;
98
99 return fscache_cookie_valid(cookie) && cookie->cache_priv &&
100 fscache_cookie_enabled(cookie);
101#else
102 return false;
103#endif
104}
105
3d3c9504
DH
106/*****************************************************************************/
107/*
108 * debug tracing
109 */
110#define dbgprintk(FMT, ...) \
111 printk("[%-6.6s] "FMT"\n", current->comm, ##__VA_ARGS__)
112
113#define kenter(FMT, ...) dbgprintk("==> %s("FMT")", __func__, ##__VA_ARGS__)
114#define kleave(FMT, ...) dbgprintk("<== %s()"FMT"", __func__, ##__VA_ARGS__)
115#define kdebug(FMT, ...) dbgprintk(FMT, ##__VA_ARGS__)
116
117#ifdef __KDEBUG
118#define _enter(FMT, ...) kenter(FMT, ##__VA_ARGS__)
119#define _leave(FMT, ...) kleave(FMT, ##__VA_ARGS__)
120#define _debug(FMT, ...) kdebug(FMT, ##__VA_ARGS__)
121
122#elif defined(CONFIG_NETFS_DEBUG)
123#define _enter(FMT, ...) \
124do { \
125 if (netfs_debug) \
126 kenter(FMT, ##__VA_ARGS__); \
127} while (0)
128
129#define _leave(FMT, ...) \
130do { \
131 if (netfs_debug) \
132 kleave(FMT, ##__VA_ARGS__); \
133} while (0)
134
135#define _debug(FMT, ...) \
136do { \
137 if (netfs_debug) \
138 kdebug(FMT, ##__VA_ARGS__); \
139} while (0)
140
141#else
142#define _enter(FMT, ...) no_printk("==> %s("FMT")", __func__, ##__VA_ARGS__)
143#define _leave(FMT, ...) no_printk("<== %s()"FMT"", __func__, ##__VA_ARGS__)
144#define _debug(FMT, ...) no_printk(FMT, ##__VA_ARGS__)
145#endif