Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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