Linux Audio

Check our new training course

Loading...
v6.2
  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
  8#include <linux/netfs.h>
  9#include <linux/fscache.h>
 10#include <trace/events/netfs.h>
 11
 12#ifdef pr_fmt
 13#undef pr_fmt
 14#endif
 15
 16#define pr_fmt(fmt) "netfs: " fmt
 17
 18/*
 19 * buffered_read.c
 20 */
 21void netfs_rreq_unlock_folios(struct netfs_io_request *rreq);
 22
 23/*
 24 * io.c
 25 */
 26int netfs_begin_read(struct netfs_io_request *rreq, bool sync);
 27
 28/*
 29 * main.c
 30 */
 31extern unsigned int netfs_debug;
 32
 33/*
 34 * objects.c
 35 */
 36struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,
 37					     struct file *file,
 38					     loff_t start, size_t len,
 39					     enum netfs_io_origin origin);
 40void netfs_get_request(struct netfs_io_request *rreq, enum netfs_rreq_ref_trace what);
 41void netfs_clear_subrequests(struct netfs_io_request *rreq, bool was_async);
 42void netfs_put_request(struct netfs_io_request *rreq, bool was_async,
 43		       enum netfs_rreq_ref_trace what);
 44struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq);
 45
 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
 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;
 70extern atomic_t netfs_n_rh_write_begin;
 71extern atomic_t netfs_n_rh_write_done;
 72extern atomic_t netfs_n_rh_write_failed;
 73extern atomic_t netfs_n_rh_write_zskip;
 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
 87#define netfs_stat(x) do {} while(0)
 88#define netfs_stat_d(x) do {} while(0)
 89#endif
 90
 91/*
 92 * Miscellaneous functions.
 93 */
 94static inline bool netfs_is_cache_enabled(struct netfs_inode *ctx)
 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
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
v5.14.15
 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
 
 
 
 
 8#ifdef pr_fmt
 9#undef pr_fmt
10#endif
11
12#define pr_fmt(fmt) "netfs: " fmt
13
14/*
15 * read_helper.c
 
 
 
 
 
 
 
 
 
 
16 */
17extern unsigned int netfs_debug;
18
19/*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20 * stats.c
21 */
22#ifdef CONFIG_NETFS_STATS
23extern atomic_t netfs_n_rh_readahead;
24extern atomic_t netfs_n_rh_readpage;
25extern atomic_t netfs_n_rh_rreq;
26extern atomic_t netfs_n_rh_sreq;
27extern atomic_t netfs_n_rh_download;
28extern atomic_t netfs_n_rh_download_done;
29extern atomic_t netfs_n_rh_download_failed;
30extern atomic_t netfs_n_rh_download_instead;
31extern atomic_t netfs_n_rh_read;
32extern atomic_t netfs_n_rh_read_done;
33extern atomic_t netfs_n_rh_read_failed;
34extern atomic_t netfs_n_rh_zero;
35extern atomic_t netfs_n_rh_short_read;
36extern atomic_t netfs_n_rh_write;
37extern atomic_t netfs_n_rh_write_begin;
38extern atomic_t netfs_n_rh_write_done;
39extern atomic_t netfs_n_rh_write_failed;
40extern atomic_t netfs_n_rh_write_zskip;
41
42
43static inline void netfs_stat(atomic_t *stat)
44{
45	atomic_inc(stat);
46}
47
48static inline void netfs_stat_d(atomic_t *stat)
49{
50	atomic_dec(stat);
51}
52
53#else
54#define netfs_stat(x) do {} while(0)
55#define netfs_stat_d(x) do {} while(0)
56#endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
58/*****************************************************************************/
59/*
60 * debug tracing
61 */
62#define dbgprintk(FMT, ...) \
63	printk("[%-6.6s] "FMT"\n", current->comm, ##__VA_ARGS__)
64
65#define kenter(FMT, ...) dbgprintk("==> %s("FMT")", __func__, ##__VA_ARGS__)
66#define kleave(FMT, ...) dbgprintk("<== %s()"FMT"", __func__, ##__VA_ARGS__)
67#define kdebug(FMT, ...) dbgprintk(FMT, ##__VA_ARGS__)
68
69#ifdef __KDEBUG
70#define _enter(FMT, ...) kenter(FMT, ##__VA_ARGS__)
71#define _leave(FMT, ...) kleave(FMT, ##__VA_ARGS__)
72#define _debug(FMT, ...) kdebug(FMT, ##__VA_ARGS__)
73
74#elif defined(CONFIG_NETFS_DEBUG)
75#define _enter(FMT, ...)			\
76do {						\
77	if (netfs_debug)			\
78		kenter(FMT, ##__VA_ARGS__);	\
79} while (0)
80
81#define _leave(FMT, ...)			\
82do {						\
83	if (netfs_debug)			\
84		kleave(FMT, ##__VA_ARGS__);	\
85} while (0)
86
87#define _debug(FMT, ...)			\
88do {						\
89	if (netfs_debug)			\
90		kdebug(FMT, ##__VA_ARGS__);	\
91} while (0)
92
93#else
94#define _enter(FMT, ...) no_printk("==> %s("FMT")", __func__, ##__VA_ARGS__)
95#define _leave(FMT, ...) no_printk("<== %s()"FMT"", __func__, ##__VA_ARGS__)
96#define _debug(FMT, ...) no_printk(FMT, ##__VA_ARGS__)
97#endif