netfs, fscache: Combine fscache with netfs
Now that the fscache code is moved to be colocated with the netfslib code so that they combined into one module, do the combining. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> cc: Christian Brauner <christian@brauner.io> cc: linux-fsdevel@vger.kernel.org cc: linux-cachefs@redhat.com cc: linux-nfs@vger.kernel.org, cc: linux-erofs@lists.ozlabs.org
This commit is contained in:
@@ -9,8 +9,9 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/netfs.h>
|
||||
#include <linux/fscache.h>
|
||||
#include <linux/fscache-cache.h>
|
||||
#include <trace/events/netfs.h>
|
||||
#include "fscache_internal.h"
|
||||
#include <trace/events/fscache.h>
|
||||
|
||||
#ifdef pr_fmt
|
||||
#undef pr_fmt
|
||||
@@ -106,11 +107,143 @@ static inline bool netfs_is_cache_enabled(struct netfs_inode *ctx)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* fscache-cache.c
|
||||
*/
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern const struct seq_operations fscache_caches_seq_ops;
|
||||
#endif
|
||||
bool fscache_begin_cache_access(struct fscache_cache *cache, enum fscache_access_trace why);
|
||||
void fscache_end_cache_access(struct fscache_cache *cache, enum fscache_access_trace why);
|
||||
struct fscache_cache *fscache_lookup_cache(const char *name, bool is_cache);
|
||||
void fscache_put_cache(struct fscache_cache *cache, enum fscache_cache_trace where);
|
||||
|
||||
static inline enum fscache_cache_state fscache_cache_state(const struct fscache_cache *cache)
|
||||
{
|
||||
return smp_load_acquire(&cache->state);
|
||||
}
|
||||
|
||||
static inline bool fscache_cache_is_live(const struct fscache_cache *cache)
|
||||
{
|
||||
return fscache_cache_state(cache) == FSCACHE_CACHE_IS_ACTIVE;
|
||||
}
|
||||
|
||||
static inline void fscache_set_cache_state(struct fscache_cache *cache,
|
||||
enum fscache_cache_state new_state)
|
||||
{
|
||||
smp_store_release(&cache->state, new_state);
|
||||
|
||||
}
|
||||
|
||||
static inline bool fscache_set_cache_state_maybe(struct fscache_cache *cache,
|
||||
enum fscache_cache_state old_state,
|
||||
enum fscache_cache_state new_state)
|
||||
{
|
||||
return try_cmpxchg_release(&cache->state, &old_state, new_state);
|
||||
}
|
||||
|
||||
/*
|
||||
* fscache-cookie.c
|
||||
*/
|
||||
extern struct kmem_cache *fscache_cookie_jar;
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern const struct seq_operations fscache_cookies_seq_ops;
|
||||
#endif
|
||||
extern struct timer_list fscache_cookie_lru_timer;
|
||||
|
||||
extern void fscache_print_cookie(struct fscache_cookie *cookie, char prefix);
|
||||
extern bool fscache_begin_cookie_access(struct fscache_cookie *cookie,
|
||||
enum fscache_access_trace why);
|
||||
|
||||
static inline void fscache_see_cookie(struct fscache_cookie *cookie,
|
||||
enum fscache_cookie_trace where)
|
||||
{
|
||||
trace_fscache_cookie(cookie->debug_id, refcount_read(&cookie->ref),
|
||||
where);
|
||||
}
|
||||
|
||||
/*
|
||||
* fscache-main.c
|
||||
*/
|
||||
extern unsigned int fscache_hash(unsigned int salt, const void *data, size_t len);
|
||||
|
||||
/*
|
||||
* fscache-proc.c
|
||||
*/
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern int __init fscache_proc_init(void);
|
||||
extern void fscache_proc_cleanup(void);
|
||||
#else
|
||||
#define fscache_proc_init() (0)
|
||||
#define fscache_proc_cleanup() do {} while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* fscache-stats.c
|
||||
*/
|
||||
#ifdef CONFIG_FSCACHE_STATS
|
||||
extern atomic_t fscache_n_volumes;
|
||||
extern atomic_t fscache_n_volumes_collision;
|
||||
extern atomic_t fscache_n_volumes_nomem;
|
||||
extern atomic_t fscache_n_cookies;
|
||||
extern atomic_t fscache_n_cookies_lru;
|
||||
extern atomic_t fscache_n_cookies_lru_expired;
|
||||
extern atomic_t fscache_n_cookies_lru_removed;
|
||||
extern atomic_t fscache_n_cookies_lru_dropped;
|
||||
|
||||
extern atomic_t fscache_n_acquires;
|
||||
extern atomic_t fscache_n_acquires_ok;
|
||||
extern atomic_t fscache_n_acquires_oom;
|
||||
|
||||
extern atomic_t fscache_n_invalidates;
|
||||
|
||||
extern atomic_t fscache_n_relinquishes;
|
||||
extern atomic_t fscache_n_relinquishes_retire;
|
||||
extern atomic_t fscache_n_relinquishes_dropped;
|
||||
|
||||
extern atomic_t fscache_n_resizes;
|
||||
extern atomic_t fscache_n_resizes_null;
|
||||
|
||||
static inline void fscache_stat(atomic_t *stat)
|
||||
{
|
||||
atomic_inc(stat);
|
||||
}
|
||||
|
||||
static inline void fscache_stat_d(atomic_t *stat)
|
||||
{
|
||||
atomic_dec(stat);
|
||||
}
|
||||
|
||||
#define __fscache_stat(stat) (stat)
|
||||
|
||||
int fscache_stats_show(struct seq_file *m, void *v);
|
||||
#else
|
||||
|
||||
#define __fscache_stat(stat) (NULL)
|
||||
#define fscache_stat(stat) do {} while (0)
|
||||
#define fscache_stat_d(stat) do {} while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* fscache-volume.c
|
||||
*/
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern const struct seq_operations fscache_volumes_seq_ops;
|
||||
#endif
|
||||
|
||||
struct fscache_volume *fscache_get_volume(struct fscache_volume *volume,
|
||||
enum fscache_volume_trace where);
|
||||
void fscache_put_volume(struct fscache_volume *volume,
|
||||
enum fscache_volume_trace where);
|
||||
bool fscache_begin_volume_access(struct fscache_volume *volume,
|
||||
struct fscache_cookie *cookie,
|
||||
enum fscache_access_trace why);
|
||||
void fscache_create_volume(struct fscache_volume *volume, bool wait);
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
* debug tracing
|
||||
*/
|
||||
#if 0
|
||||
#define dbgprintk(FMT, ...) \
|
||||
printk("[%-6.6s] "FMT"\n", current->comm, ##__VA_ARGS__)
|
||||
|
||||
@@ -147,4 +280,57 @@ do { \
|
||||
#define _leave(FMT, ...) no_printk("<== %s()"FMT"", __func__, ##__VA_ARGS__)
|
||||
#define _debug(FMT, ...) no_printk(FMT, ##__VA_ARGS__)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* assertions
|
||||
*/
|
||||
#if 1 /* defined(__KDEBUGALL) */
|
||||
|
||||
#define ASSERT(X) \
|
||||
do { \
|
||||
if (unlikely(!(X))) { \
|
||||
pr_err("\n"); \
|
||||
pr_err("Assertion failed\n"); \
|
||||
BUG(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define ASSERTCMP(X, OP, Y) \
|
||||
do { \
|
||||
if (unlikely(!((X) OP (Y)))) { \
|
||||
pr_err("\n"); \
|
||||
pr_err("Assertion failed\n"); \
|
||||
pr_err("%lx " #OP " %lx is false\n", \
|
||||
(unsigned long)(X), (unsigned long)(Y)); \
|
||||
BUG(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define ASSERTIF(C, X) \
|
||||
do { \
|
||||
if (unlikely((C) && !(X))) { \
|
||||
pr_err("\n"); \
|
||||
pr_err("Assertion failed\n"); \
|
||||
BUG(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define ASSERTIFCMP(C, X, OP, Y) \
|
||||
do { \
|
||||
if (unlikely((C) && !((X) OP (Y)))) { \
|
||||
pr_err("\n"); \
|
||||
pr_err("Assertion failed\n"); \
|
||||
pr_err("%lx " #OP " %lx is false\n", \
|
||||
(unsigned long)(X), (unsigned long)(Y)); \
|
||||
BUG(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
#define ASSERT(X) do {} while (0)
|
||||
#define ASSERTCMP(X, OP, Y) do {} while (0)
|
||||
#define ASSERTIF(C, X) do {} while (0)
|
||||
#define ASSERTIFCMP(C, X, OP, Y) do {} while (0)
|
||||
|
||||
#endif /* assert or not */
|
||||
|
||||
Reference in New Issue
Block a user