// SPDX-License-Identifier: GPL-2.0-or-later /* General filesystem local caching manager * * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved. * Written by David Howells ([email protected]) */ #define FSCACHE_DEBUG_LEVEL … #include <linux/module.h> #include <linux/init.h> #include "internal.h" #define CREATE_TRACE_POINTS #include <trace/events/fscache.h> EXPORT_TRACEPOINT_SYMBOL(…); EXPORT_TRACEPOINT_SYMBOL(…); EXPORT_TRACEPOINT_SYMBOL(…); struct workqueue_struct *fscache_wq; EXPORT_SYMBOL(…); /* * Mixing scores (in bits) for (7,20): * Input delta: 1-bit 2-bit * 1 round: 330.3 9201.6 * 2 rounds: 1246.4 25475.4 * 3 rounds: 1907.1 31295.1 * 4 rounds: 2042.3 31718.6 * Perfect: 2048 31744 * (32*64) (32*31/2 * 64) */ #define HASH_MIX(x, y, a) … static inline unsigned int fold_hash(unsigned long x, unsigned long y) { … } /* * Generate a hash. This is derived from full_name_hash(), but we want to be * sure it is arch independent and that it doesn't change as bits of the * computed hash value might appear on disk. The caller must guarantee that * the source data is a multiple of four bytes in size. */ unsigned int fscache_hash(unsigned int salt, const void *data, size_t len) { … } /* * initialise the fs caching module */ int __init fscache_init(void) { … } /* * clean up on module removal */ void __exit fscache_exit(void) { … }