cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cache.c (46941B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * net/sunrpc/cache.c
      4 *
      5 * Generic code for various authentication-related caches
      6 * used by sunrpc clients and servers.
      7 *
      8 * Copyright (C) 2002 Neil Brown <neilb@cse.unsw.edu.au>
      9 */
     10
     11#include <linux/types.h>
     12#include <linux/fs.h>
     13#include <linux/file.h>
     14#include <linux/slab.h>
     15#include <linux/signal.h>
     16#include <linux/sched.h>
     17#include <linux/kmod.h>
     18#include <linux/list.h>
     19#include <linux/module.h>
     20#include <linux/ctype.h>
     21#include <linux/string_helpers.h>
     22#include <linux/uaccess.h>
     23#include <linux/poll.h>
     24#include <linux/seq_file.h>
     25#include <linux/proc_fs.h>
     26#include <linux/net.h>
     27#include <linux/workqueue.h>
     28#include <linux/mutex.h>
     29#include <linux/pagemap.h>
     30#include <asm/ioctls.h>
     31#include <linux/sunrpc/types.h>
     32#include <linux/sunrpc/cache.h>
     33#include <linux/sunrpc/stats.h>
     34#include <linux/sunrpc/rpc_pipe_fs.h>
     35#include <trace/events/sunrpc.h>
     36
     37#include "netns.h"
     38#include "fail.h"
     39
     40#define	 RPCDBG_FACILITY RPCDBG_CACHE
     41
     42static bool cache_defer_req(struct cache_req *req, struct cache_head *item);
     43static void cache_revisit_request(struct cache_head *item);
     44
     45static void cache_init(struct cache_head *h, struct cache_detail *detail)
     46{
     47	time64_t now = seconds_since_boot();
     48	INIT_HLIST_NODE(&h->cache_list);
     49	h->flags = 0;
     50	kref_init(&h->ref);
     51	h->expiry_time = now + CACHE_NEW_EXPIRY;
     52	if (now <= detail->flush_time)
     53		/* ensure it isn't already expired */
     54		now = detail->flush_time + 1;
     55	h->last_refresh = now;
     56}
     57
     58static void cache_fresh_unlocked(struct cache_head *head,
     59				struct cache_detail *detail);
     60
     61static struct cache_head *sunrpc_cache_find_rcu(struct cache_detail *detail,
     62						struct cache_head *key,
     63						int hash)
     64{
     65	struct hlist_head *head = &detail->hash_table[hash];
     66	struct cache_head *tmp;
     67
     68	rcu_read_lock();
     69	hlist_for_each_entry_rcu(tmp, head, cache_list) {
     70		if (!detail->match(tmp, key))
     71			continue;
     72		if (test_bit(CACHE_VALID, &tmp->flags) &&
     73		    cache_is_expired(detail, tmp))
     74			continue;
     75		tmp = cache_get_rcu(tmp);
     76		rcu_read_unlock();
     77		return tmp;
     78	}
     79	rcu_read_unlock();
     80	return NULL;
     81}
     82
     83static void sunrpc_begin_cache_remove_entry(struct cache_head *ch,
     84					    struct cache_detail *cd)
     85{
     86	/* Must be called under cd->hash_lock */
     87	hlist_del_init_rcu(&ch->cache_list);
     88	set_bit(CACHE_CLEANED, &ch->flags);
     89	cd->entries --;
     90}
     91
     92static void sunrpc_end_cache_remove_entry(struct cache_head *ch,
     93					  struct cache_detail *cd)
     94{
     95	cache_fresh_unlocked(ch, cd);
     96	cache_put(ch, cd);
     97}
     98
     99static struct cache_head *sunrpc_cache_add_entry(struct cache_detail *detail,
    100						 struct cache_head *key,
    101						 int hash)
    102{
    103	struct cache_head *new, *tmp, *freeme = NULL;
    104	struct hlist_head *head = &detail->hash_table[hash];
    105
    106	new = detail->alloc();
    107	if (!new)
    108		return NULL;
    109	/* must fully initialise 'new', else
    110	 * we might get lose if we need to
    111	 * cache_put it soon.
    112	 */
    113	cache_init(new, detail);
    114	detail->init(new, key);
    115
    116	spin_lock(&detail->hash_lock);
    117
    118	/* check if entry appeared while we slept */
    119	hlist_for_each_entry_rcu(tmp, head, cache_list,
    120				 lockdep_is_held(&detail->hash_lock)) {
    121		if (!detail->match(tmp, key))
    122			continue;
    123		if (test_bit(CACHE_VALID, &tmp->flags) &&
    124		    cache_is_expired(detail, tmp)) {
    125			sunrpc_begin_cache_remove_entry(tmp, detail);
    126			trace_cache_entry_expired(detail, tmp);
    127			freeme = tmp;
    128			break;
    129		}
    130		cache_get(tmp);
    131		spin_unlock(&detail->hash_lock);
    132		cache_put(new, detail);
    133		return tmp;
    134	}
    135
    136	hlist_add_head_rcu(&new->cache_list, head);
    137	detail->entries++;
    138	cache_get(new);
    139	spin_unlock(&detail->hash_lock);
    140
    141	if (freeme)
    142		sunrpc_end_cache_remove_entry(freeme, detail);
    143	return new;
    144}
    145
    146struct cache_head *sunrpc_cache_lookup_rcu(struct cache_detail *detail,
    147					   struct cache_head *key, int hash)
    148{
    149	struct cache_head *ret;
    150
    151	ret = sunrpc_cache_find_rcu(detail, key, hash);
    152	if (ret)
    153		return ret;
    154	/* Didn't find anything, insert an empty entry */
    155	return sunrpc_cache_add_entry(detail, key, hash);
    156}
    157EXPORT_SYMBOL_GPL(sunrpc_cache_lookup_rcu);
    158
    159static void cache_dequeue(struct cache_detail *detail, struct cache_head *ch);
    160
    161static void cache_fresh_locked(struct cache_head *head, time64_t expiry,
    162			       struct cache_detail *detail)
    163{
    164	time64_t now = seconds_since_boot();
    165	if (now <= detail->flush_time)
    166		/* ensure it isn't immediately treated as expired */
    167		now = detail->flush_time + 1;
    168	head->expiry_time = expiry;
    169	head->last_refresh = now;
    170	smp_wmb(); /* paired with smp_rmb() in cache_is_valid() */
    171	set_bit(CACHE_VALID, &head->flags);
    172}
    173
    174static void cache_fresh_unlocked(struct cache_head *head,
    175				 struct cache_detail *detail)
    176{
    177	if (test_and_clear_bit(CACHE_PENDING, &head->flags)) {
    178		cache_revisit_request(head);
    179		cache_dequeue(detail, head);
    180	}
    181}
    182
    183static void cache_make_negative(struct cache_detail *detail,
    184				struct cache_head *h)
    185{
    186	set_bit(CACHE_NEGATIVE, &h->flags);
    187	trace_cache_entry_make_negative(detail, h);
    188}
    189
    190static void cache_entry_update(struct cache_detail *detail,
    191			       struct cache_head *h,
    192			       struct cache_head *new)
    193{
    194	if (!test_bit(CACHE_NEGATIVE, &new->flags)) {
    195		detail->update(h, new);
    196		trace_cache_entry_update(detail, h);
    197	} else {
    198		cache_make_negative(detail, h);
    199	}
    200}
    201
    202struct cache_head *sunrpc_cache_update(struct cache_detail *detail,
    203				       struct cache_head *new, struct cache_head *old, int hash)
    204{
    205	/* The 'old' entry is to be replaced by 'new'.
    206	 * If 'old' is not VALID, we update it directly,
    207	 * otherwise we need to replace it
    208	 */
    209	struct cache_head *tmp;
    210
    211	if (!test_bit(CACHE_VALID, &old->flags)) {
    212		spin_lock(&detail->hash_lock);
    213		if (!test_bit(CACHE_VALID, &old->flags)) {
    214			cache_entry_update(detail, old, new);
    215			cache_fresh_locked(old, new->expiry_time, detail);
    216			spin_unlock(&detail->hash_lock);
    217			cache_fresh_unlocked(old, detail);
    218			return old;
    219		}
    220		spin_unlock(&detail->hash_lock);
    221	}
    222	/* We need to insert a new entry */
    223	tmp = detail->alloc();
    224	if (!tmp) {
    225		cache_put(old, detail);
    226		return NULL;
    227	}
    228	cache_init(tmp, detail);
    229	detail->init(tmp, old);
    230
    231	spin_lock(&detail->hash_lock);
    232	cache_entry_update(detail, tmp, new);
    233	hlist_add_head(&tmp->cache_list, &detail->hash_table[hash]);
    234	detail->entries++;
    235	cache_get(tmp);
    236	cache_fresh_locked(tmp, new->expiry_time, detail);
    237	cache_fresh_locked(old, 0, detail);
    238	spin_unlock(&detail->hash_lock);
    239	cache_fresh_unlocked(tmp, detail);
    240	cache_fresh_unlocked(old, detail);
    241	cache_put(old, detail);
    242	return tmp;
    243}
    244EXPORT_SYMBOL_GPL(sunrpc_cache_update);
    245
    246static inline int cache_is_valid(struct cache_head *h)
    247{
    248	if (!test_bit(CACHE_VALID, &h->flags))
    249		return -EAGAIN;
    250	else {
    251		/* entry is valid */
    252		if (test_bit(CACHE_NEGATIVE, &h->flags))
    253			return -ENOENT;
    254		else {
    255			/*
    256			 * In combination with write barrier in
    257			 * sunrpc_cache_update, ensures that anyone
    258			 * using the cache entry after this sees the
    259			 * updated contents:
    260			 */
    261			smp_rmb();
    262			return 0;
    263		}
    264	}
    265}
    266
    267static int try_to_negate_entry(struct cache_detail *detail, struct cache_head *h)
    268{
    269	int rv;
    270
    271	spin_lock(&detail->hash_lock);
    272	rv = cache_is_valid(h);
    273	if (rv == -EAGAIN) {
    274		cache_make_negative(detail, h);
    275		cache_fresh_locked(h, seconds_since_boot()+CACHE_NEW_EXPIRY,
    276				   detail);
    277		rv = -ENOENT;
    278	}
    279	spin_unlock(&detail->hash_lock);
    280	cache_fresh_unlocked(h, detail);
    281	return rv;
    282}
    283
    284/*
    285 * This is the generic cache management routine for all
    286 * the authentication caches.
    287 * It checks the currency of a cache item and will (later)
    288 * initiate an upcall to fill it if needed.
    289 *
    290 *
    291 * Returns 0 if the cache_head can be used, or cache_puts it and returns
    292 * -EAGAIN if upcall is pending and request has been queued
    293 * -ETIMEDOUT if upcall failed or request could not be queue or
    294 *           upcall completed but item is still invalid (implying that
    295 *           the cache item has been replaced with a newer one).
    296 * -ENOENT if cache entry was negative
    297 */
    298int cache_check(struct cache_detail *detail,
    299		    struct cache_head *h, struct cache_req *rqstp)
    300{
    301	int rv;
    302	time64_t refresh_age, age;
    303
    304	/* First decide return status as best we can */
    305	rv = cache_is_valid(h);
    306
    307	/* now see if we want to start an upcall */
    308	refresh_age = (h->expiry_time - h->last_refresh);
    309	age = seconds_since_boot() - h->last_refresh;
    310
    311	if (rqstp == NULL) {
    312		if (rv == -EAGAIN)
    313			rv = -ENOENT;
    314	} else if (rv == -EAGAIN ||
    315		   (h->expiry_time != 0 && age > refresh_age/2)) {
    316		dprintk("RPC:       Want update, refage=%lld, age=%lld\n",
    317				refresh_age, age);
    318		switch (detail->cache_upcall(detail, h)) {
    319		case -EINVAL:
    320			rv = try_to_negate_entry(detail, h);
    321			break;
    322		case -EAGAIN:
    323			cache_fresh_unlocked(h, detail);
    324			break;
    325		}
    326	}
    327
    328	if (rv == -EAGAIN) {
    329		if (!cache_defer_req(rqstp, h)) {
    330			/*
    331			 * Request was not deferred; handle it as best
    332			 * we can ourselves:
    333			 */
    334			rv = cache_is_valid(h);
    335			if (rv == -EAGAIN)
    336				rv = -ETIMEDOUT;
    337		}
    338	}
    339	if (rv)
    340		cache_put(h, detail);
    341	return rv;
    342}
    343EXPORT_SYMBOL_GPL(cache_check);
    344
    345/*
    346 * caches need to be periodically cleaned.
    347 * For this we maintain a list of cache_detail and
    348 * a current pointer into that list and into the table
    349 * for that entry.
    350 *
    351 * Each time cache_clean is called it finds the next non-empty entry
    352 * in the current table and walks the list in that entry
    353 * looking for entries that can be removed.
    354 *
    355 * An entry gets removed if:
    356 * - The expiry is before current time
    357 * - The last_refresh time is before the flush_time for that cache
    358 *
    359 * later we might drop old entries with non-NEVER expiry if that table
    360 * is getting 'full' for some definition of 'full'
    361 *
    362 * The question of "how often to scan a table" is an interesting one
    363 * and is answered in part by the use of the "nextcheck" field in the
    364 * cache_detail.
    365 * When a scan of a table begins, the nextcheck field is set to a time
    366 * that is well into the future.
    367 * While scanning, if an expiry time is found that is earlier than the
    368 * current nextcheck time, nextcheck is set to that expiry time.
    369 * If the flush_time is ever set to a time earlier than the nextcheck
    370 * time, the nextcheck time is then set to that flush_time.
    371 *
    372 * A table is then only scanned if the current time is at least
    373 * the nextcheck time.
    374 *
    375 */
    376
    377static LIST_HEAD(cache_list);
    378static DEFINE_SPINLOCK(cache_list_lock);
    379static struct cache_detail *current_detail;
    380static int current_index;
    381
    382static void do_cache_clean(struct work_struct *work);
    383static struct delayed_work cache_cleaner;
    384
    385void sunrpc_init_cache_detail(struct cache_detail *cd)
    386{
    387	spin_lock_init(&cd->hash_lock);
    388	INIT_LIST_HEAD(&cd->queue);
    389	spin_lock(&cache_list_lock);
    390	cd->nextcheck = 0;
    391	cd->entries = 0;
    392	atomic_set(&cd->writers, 0);
    393	cd->last_close = 0;
    394	cd->last_warn = -1;
    395	list_add(&cd->others, &cache_list);
    396	spin_unlock(&cache_list_lock);
    397
    398	/* start the cleaning process */
    399	queue_delayed_work(system_power_efficient_wq, &cache_cleaner, 0);
    400}
    401EXPORT_SYMBOL_GPL(sunrpc_init_cache_detail);
    402
    403void sunrpc_destroy_cache_detail(struct cache_detail *cd)
    404{
    405	cache_purge(cd);
    406	spin_lock(&cache_list_lock);
    407	spin_lock(&cd->hash_lock);
    408	if (current_detail == cd)
    409		current_detail = NULL;
    410	list_del_init(&cd->others);
    411	spin_unlock(&cd->hash_lock);
    412	spin_unlock(&cache_list_lock);
    413	if (list_empty(&cache_list)) {
    414		/* module must be being unloaded so its safe to kill the worker */
    415		cancel_delayed_work_sync(&cache_cleaner);
    416	}
    417}
    418EXPORT_SYMBOL_GPL(sunrpc_destroy_cache_detail);
    419
    420/* clean cache tries to find something to clean
    421 * and cleans it.
    422 * It returns 1 if it cleaned something,
    423 *            0 if it didn't find anything this time
    424 *           -1 if it fell off the end of the list.
    425 */
    426static int cache_clean(void)
    427{
    428	int rv = 0;
    429	struct list_head *next;
    430
    431	spin_lock(&cache_list_lock);
    432
    433	/* find a suitable table if we don't already have one */
    434	while (current_detail == NULL ||
    435	    current_index >= current_detail->hash_size) {
    436		if (current_detail)
    437			next = current_detail->others.next;
    438		else
    439			next = cache_list.next;
    440		if (next == &cache_list) {
    441			current_detail = NULL;
    442			spin_unlock(&cache_list_lock);
    443			return -1;
    444		}
    445		current_detail = list_entry(next, struct cache_detail, others);
    446		if (current_detail->nextcheck > seconds_since_boot())
    447			current_index = current_detail->hash_size;
    448		else {
    449			current_index = 0;
    450			current_detail->nextcheck = seconds_since_boot()+30*60;
    451		}
    452	}
    453
    454	/* find a non-empty bucket in the table */
    455	while (current_detail &&
    456	       current_index < current_detail->hash_size &&
    457	       hlist_empty(&current_detail->hash_table[current_index]))
    458		current_index++;
    459
    460	/* find a cleanable entry in the bucket and clean it, or set to next bucket */
    461
    462	if (current_detail && current_index < current_detail->hash_size) {
    463		struct cache_head *ch = NULL;
    464		struct cache_detail *d;
    465		struct hlist_head *head;
    466		struct hlist_node *tmp;
    467
    468		spin_lock(&current_detail->hash_lock);
    469
    470		/* Ok, now to clean this strand */
    471
    472		head = &current_detail->hash_table[current_index];
    473		hlist_for_each_entry_safe(ch, tmp, head, cache_list) {
    474			if (current_detail->nextcheck > ch->expiry_time)
    475				current_detail->nextcheck = ch->expiry_time+1;
    476			if (!cache_is_expired(current_detail, ch))
    477				continue;
    478
    479			sunrpc_begin_cache_remove_entry(ch, current_detail);
    480			trace_cache_entry_expired(current_detail, ch);
    481			rv = 1;
    482			break;
    483		}
    484
    485		spin_unlock(&current_detail->hash_lock);
    486		d = current_detail;
    487		if (!ch)
    488			current_index ++;
    489		spin_unlock(&cache_list_lock);
    490		if (ch)
    491			sunrpc_end_cache_remove_entry(ch, d);
    492	} else
    493		spin_unlock(&cache_list_lock);
    494
    495	return rv;
    496}
    497
    498/*
    499 * We want to regularly clean the cache, so we need to schedule some work ...
    500 */
    501static void do_cache_clean(struct work_struct *work)
    502{
    503	int delay;
    504
    505	if (list_empty(&cache_list))
    506		return;
    507
    508	if (cache_clean() == -1)
    509		delay = round_jiffies_relative(30*HZ);
    510	else
    511		delay = 5;
    512
    513	queue_delayed_work(system_power_efficient_wq, &cache_cleaner, delay);
    514}
    515
    516
    517/*
    518 * Clean all caches promptly.  This just calls cache_clean
    519 * repeatedly until we are sure that every cache has had a chance to
    520 * be fully cleaned
    521 */
    522void cache_flush(void)
    523{
    524	while (cache_clean() != -1)
    525		cond_resched();
    526	while (cache_clean() != -1)
    527		cond_resched();
    528}
    529EXPORT_SYMBOL_GPL(cache_flush);
    530
    531void cache_purge(struct cache_detail *detail)
    532{
    533	struct cache_head *ch = NULL;
    534	struct hlist_head *head = NULL;
    535	int i = 0;
    536
    537	spin_lock(&detail->hash_lock);
    538	if (!detail->entries) {
    539		spin_unlock(&detail->hash_lock);
    540		return;
    541	}
    542
    543	dprintk("RPC: %d entries in %s cache\n", detail->entries, detail->name);
    544	for (i = 0; i < detail->hash_size; i++) {
    545		head = &detail->hash_table[i];
    546		while (!hlist_empty(head)) {
    547			ch = hlist_entry(head->first, struct cache_head,
    548					 cache_list);
    549			sunrpc_begin_cache_remove_entry(ch, detail);
    550			spin_unlock(&detail->hash_lock);
    551			sunrpc_end_cache_remove_entry(ch, detail);
    552			spin_lock(&detail->hash_lock);
    553		}
    554	}
    555	spin_unlock(&detail->hash_lock);
    556}
    557EXPORT_SYMBOL_GPL(cache_purge);
    558
    559
    560/*
    561 * Deferral and Revisiting of Requests.
    562 *
    563 * If a cache lookup finds a pending entry, we
    564 * need to defer the request and revisit it later.
    565 * All deferred requests are stored in a hash table,
    566 * indexed by "struct cache_head *".
    567 * As it may be wasteful to store a whole request
    568 * structure, we allow the request to provide a
    569 * deferred form, which must contain a
    570 * 'struct cache_deferred_req'
    571 * This cache_deferred_req contains a method to allow
    572 * it to be revisited when cache info is available
    573 */
    574
    575#define	DFR_HASHSIZE	(PAGE_SIZE/sizeof(struct list_head))
    576#define	DFR_HASH(item)	((((long)item)>>4 ^ (((long)item)>>13)) % DFR_HASHSIZE)
    577
    578#define	DFR_MAX	300	/* ??? */
    579
    580static DEFINE_SPINLOCK(cache_defer_lock);
    581static LIST_HEAD(cache_defer_list);
    582static struct hlist_head cache_defer_hash[DFR_HASHSIZE];
    583static int cache_defer_cnt;
    584
    585static void __unhash_deferred_req(struct cache_deferred_req *dreq)
    586{
    587	hlist_del_init(&dreq->hash);
    588	if (!list_empty(&dreq->recent)) {
    589		list_del_init(&dreq->recent);
    590		cache_defer_cnt--;
    591	}
    592}
    593
    594static void __hash_deferred_req(struct cache_deferred_req *dreq, struct cache_head *item)
    595{
    596	int hash = DFR_HASH(item);
    597
    598	INIT_LIST_HEAD(&dreq->recent);
    599	hlist_add_head(&dreq->hash, &cache_defer_hash[hash]);
    600}
    601
    602static void setup_deferral(struct cache_deferred_req *dreq,
    603			   struct cache_head *item,
    604			   int count_me)
    605{
    606
    607	dreq->item = item;
    608
    609	spin_lock(&cache_defer_lock);
    610
    611	__hash_deferred_req(dreq, item);
    612
    613	if (count_me) {
    614		cache_defer_cnt++;
    615		list_add(&dreq->recent, &cache_defer_list);
    616	}
    617
    618	spin_unlock(&cache_defer_lock);
    619
    620}
    621
    622struct thread_deferred_req {
    623	struct cache_deferred_req handle;
    624	struct completion completion;
    625};
    626
    627static void cache_restart_thread(struct cache_deferred_req *dreq, int too_many)
    628{
    629	struct thread_deferred_req *dr =
    630		container_of(dreq, struct thread_deferred_req, handle);
    631	complete(&dr->completion);
    632}
    633
    634static void cache_wait_req(struct cache_req *req, struct cache_head *item)
    635{
    636	struct thread_deferred_req sleeper;
    637	struct cache_deferred_req *dreq = &sleeper.handle;
    638
    639	sleeper.completion = COMPLETION_INITIALIZER_ONSTACK(sleeper.completion);
    640	dreq->revisit = cache_restart_thread;
    641
    642	setup_deferral(dreq, item, 0);
    643
    644	if (!test_bit(CACHE_PENDING, &item->flags) ||
    645	    wait_for_completion_interruptible_timeout(
    646		    &sleeper.completion, req->thread_wait) <= 0) {
    647		/* The completion wasn't completed, so we need
    648		 * to clean up
    649		 */
    650		spin_lock(&cache_defer_lock);
    651		if (!hlist_unhashed(&sleeper.handle.hash)) {
    652			__unhash_deferred_req(&sleeper.handle);
    653			spin_unlock(&cache_defer_lock);
    654		} else {
    655			/* cache_revisit_request already removed
    656			 * this from the hash table, but hasn't
    657			 * called ->revisit yet.  It will very soon
    658			 * and we need to wait for it.
    659			 */
    660			spin_unlock(&cache_defer_lock);
    661			wait_for_completion(&sleeper.completion);
    662		}
    663	}
    664}
    665
    666static void cache_limit_defers(void)
    667{
    668	/* Make sure we haven't exceed the limit of allowed deferred
    669	 * requests.
    670	 */
    671	struct cache_deferred_req *discard = NULL;
    672
    673	if (cache_defer_cnt <= DFR_MAX)
    674		return;
    675
    676	spin_lock(&cache_defer_lock);
    677
    678	/* Consider removing either the first or the last */
    679	if (cache_defer_cnt > DFR_MAX) {
    680		if (prandom_u32() & 1)
    681			discard = list_entry(cache_defer_list.next,
    682					     struct cache_deferred_req, recent);
    683		else
    684			discard = list_entry(cache_defer_list.prev,
    685					     struct cache_deferred_req, recent);
    686		__unhash_deferred_req(discard);
    687	}
    688	spin_unlock(&cache_defer_lock);
    689	if (discard)
    690		discard->revisit(discard, 1);
    691}
    692
    693#if IS_ENABLED(CONFIG_FAIL_SUNRPC)
    694static inline bool cache_defer_immediately(void)
    695{
    696	return !fail_sunrpc.ignore_cache_wait &&
    697		should_fail(&fail_sunrpc.attr, 1);
    698}
    699#else
    700static inline bool cache_defer_immediately(void)
    701{
    702	return false;
    703}
    704#endif
    705
    706/* Return true if and only if a deferred request is queued. */
    707static bool cache_defer_req(struct cache_req *req, struct cache_head *item)
    708{
    709	struct cache_deferred_req *dreq;
    710
    711	if (!cache_defer_immediately()) {
    712		cache_wait_req(req, item);
    713		if (!test_bit(CACHE_PENDING, &item->flags))
    714			return false;
    715	}
    716
    717	dreq = req->defer(req);
    718	if (dreq == NULL)
    719		return false;
    720	setup_deferral(dreq, item, 1);
    721	if (!test_bit(CACHE_PENDING, &item->flags))
    722		/* Bit could have been cleared before we managed to
    723		 * set up the deferral, so need to revisit just in case
    724		 */
    725		cache_revisit_request(item);
    726
    727	cache_limit_defers();
    728	return true;
    729}
    730
    731static void cache_revisit_request(struct cache_head *item)
    732{
    733	struct cache_deferred_req *dreq;
    734	struct list_head pending;
    735	struct hlist_node *tmp;
    736	int hash = DFR_HASH(item);
    737
    738	INIT_LIST_HEAD(&pending);
    739	spin_lock(&cache_defer_lock);
    740
    741	hlist_for_each_entry_safe(dreq, tmp, &cache_defer_hash[hash], hash)
    742		if (dreq->item == item) {
    743			__unhash_deferred_req(dreq);
    744			list_add(&dreq->recent, &pending);
    745		}
    746
    747	spin_unlock(&cache_defer_lock);
    748
    749	while (!list_empty(&pending)) {
    750		dreq = list_entry(pending.next, struct cache_deferred_req, recent);
    751		list_del_init(&dreq->recent);
    752		dreq->revisit(dreq, 0);
    753	}
    754}
    755
    756void cache_clean_deferred(void *owner)
    757{
    758	struct cache_deferred_req *dreq, *tmp;
    759	struct list_head pending;
    760
    761
    762	INIT_LIST_HEAD(&pending);
    763	spin_lock(&cache_defer_lock);
    764
    765	list_for_each_entry_safe(dreq, tmp, &cache_defer_list, recent) {
    766		if (dreq->owner == owner) {
    767			__unhash_deferred_req(dreq);
    768			list_add(&dreq->recent, &pending);
    769		}
    770	}
    771	spin_unlock(&cache_defer_lock);
    772
    773	while (!list_empty(&pending)) {
    774		dreq = list_entry(pending.next, struct cache_deferred_req, recent);
    775		list_del_init(&dreq->recent);
    776		dreq->revisit(dreq, 1);
    777	}
    778}
    779
    780/*
    781 * communicate with user-space
    782 *
    783 * We have a magic /proc file - /proc/net/rpc/<cachename>/channel.
    784 * On read, you get a full request, or block.
    785 * On write, an update request is processed.
    786 * Poll works if anything to read, and always allows write.
    787 *
    788 * Implemented by linked list of requests.  Each open file has
    789 * a ->private that also exists in this list.  New requests are added
    790 * to the end and may wakeup and preceding readers.
    791 * New readers are added to the head.  If, on read, an item is found with
    792 * CACHE_UPCALLING clear, we free it from the list.
    793 *
    794 */
    795
    796static DEFINE_SPINLOCK(queue_lock);
    797
    798struct cache_queue {
    799	struct list_head	list;
    800	int			reader;	/* if 0, then request */
    801};
    802struct cache_request {
    803	struct cache_queue	q;
    804	struct cache_head	*item;
    805	char			* buf;
    806	int			len;
    807	int			readers;
    808};
    809struct cache_reader {
    810	struct cache_queue	q;
    811	int			offset;	/* if non-0, we have a refcnt on next request */
    812};
    813
    814static int cache_request(struct cache_detail *detail,
    815			       struct cache_request *crq)
    816{
    817	char *bp = crq->buf;
    818	int len = PAGE_SIZE;
    819
    820	detail->cache_request(detail, crq->item, &bp, &len);
    821	if (len < 0)
    822		return -E2BIG;
    823	return PAGE_SIZE - len;
    824}
    825
    826static ssize_t cache_read(struct file *filp, char __user *buf, size_t count,
    827			  loff_t *ppos, struct cache_detail *cd)
    828{
    829	struct cache_reader *rp = filp->private_data;
    830	struct cache_request *rq;
    831	struct inode *inode = file_inode(filp);
    832	int err;
    833
    834	if (count == 0)
    835		return 0;
    836
    837	inode_lock(inode); /* protect against multiple concurrent
    838			      * readers on this file */
    839 again:
    840	spin_lock(&queue_lock);
    841	/* need to find next request */
    842	while (rp->q.list.next != &cd->queue &&
    843	       list_entry(rp->q.list.next, struct cache_queue, list)
    844	       ->reader) {
    845		struct list_head *next = rp->q.list.next;
    846		list_move(&rp->q.list, next);
    847	}
    848	if (rp->q.list.next == &cd->queue) {
    849		spin_unlock(&queue_lock);
    850		inode_unlock(inode);
    851		WARN_ON_ONCE(rp->offset);
    852		return 0;
    853	}
    854	rq = container_of(rp->q.list.next, struct cache_request, q.list);
    855	WARN_ON_ONCE(rq->q.reader);
    856	if (rp->offset == 0)
    857		rq->readers++;
    858	spin_unlock(&queue_lock);
    859
    860	if (rq->len == 0) {
    861		err = cache_request(cd, rq);
    862		if (err < 0)
    863			goto out;
    864		rq->len = err;
    865	}
    866
    867	if (rp->offset == 0 && !test_bit(CACHE_PENDING, &rq->item->flags)) {
    868		err = -EAGAIN;
    869		spin_lock(&queue_lock);
    870		list_move(&rp->q.list, &rq->q.list);
    871		spin_unlock(&queue_lock);
    872	} else {
    873		if (rp->offset + count > rq->len)
    874			count = rq->len - rp->offset;
    875		err = -EFAULT;
    876		if (copy_to_user(buf, rq->buf + rp->offset, count))
    877			goto out;
    878		rp->offset += count;
    879		if (rp->offset >= rq->len) {
    880			rp->offset = 0;
    881			spin_lock(&queue_lock);
    882			list_move(&rp->q.list, &rq->q.list);
    883			spin_unlock(&queue_lock);
    884		}
    885		err = 0;
    886	}
    887 out:
    888	if (rp->offset == 0) {
    889		/* need to release rq */
    890		spin_lock(&queue_lock);
    891		rq->readers--;
    892		if (rq->readers == 0 &&
    893		    !test_bit(CACHE_PENDING, &rq->item->flags)) {
    894			list_del(&rq->q.list);
    895			spin_unlock(&queue_lock);
    896			cache_put(rq->item, cd);
    897			kfree(rq->buf);
    898			kfree(rq);
    899		} else
    900			spin_unlock(&queue_lock);
    901	}
    902	if (err == -EAGAIN)
    903		goto again;
    904	inode_unlock(inode);
    905	return err ? err :  count;
    906}
    907
    908static ssize_t cache_do_downcall(char *kaddr, const char __user *buf,
    909				 size_t count, struct cache_detail *cd)
    910{
    911	ssize_t ret;
    912
    913	if (count == 0)
    914		return -EINVAL;
    915	if (copy_from_user(kaddr, buf, count))
    916		return -EFAULT;
    917	kaddr[count] = '\0';
    918	ret = cd->cache_parse(cd, kaddr, count);
    919	if (!ret)
    920		ret = count;
    921	return ret;
    922}
    923
    924static ssize_t cache_downcall(struct address_space *mapping,
    925			      const char __user *buf,
    926			      size_t count, struct cache_detail *cd)
    927{
    928	char *write_buf;
    929	ssize_t ret = -ENOMEM;
    930
    931	if (count >= 32768) { /* 32k is max userland buffer, lets check anyway */
    932		ret = -EINVAL;
    933		goto out;
    934	}
    935
    936	write_buf = kvmalloc(count + 1, GFP_KERNEL);
    937	if (!write_buf)
    938		goto out;
    939
    940	ret = cache_do_downcall(write_buf, buf, count, cd);
    941	kvfree(write_buf);
    942out:
    943	return ret;
    944}
    945
    946static ssize_t cache_write(struct file *filp, const char __user *buf,
    947			   size_t count, loff_t *ppos,
    948			   struct cache_detail *cd)
    949{
    950	struct address_space *mapping = filp->f_mapping;
    951	struct inode *inode = file_inode(filp);
    952	ssize_t ret = -EINVAL;
    953
    954	if (!cd->cache_parse)
    955		goto out;
    956
    957	inode_lock(inode);
    958	ret = cache_downcall(mapping, buf, count, cd);
    959	inode_unlock(inode);
    960out:
    961	return ret;
    962}
    963
    964static DECLARE_WAIT_QUEUE_HEAD(queue_wait);
    965
    966static __poll_t cache_poll(struct file *filp, poll_table *wait,
    967			       struct cache_detail *cd)
    968{
    969	__poll_t mask;
    970	struct cache_reader *rp = filp->private_data;
    971	struct cache_queue *cq;
    972
    973	poll_wait(filp, &queue_wait, wait);
    974
    975	/* alway allow write */
    976	mask = EPOLLOUT | EPOLLWRNORM;
    977
    978	if (!rp)
    979		return mask;
    980
    981	spin_lock(&queue_lock);
    982
    983	for (cq= &rp->q; &cq->list != &cd->queue;
    984	     cq = list_entry(cq->list.next, struct cache_queue, list))
    985		if (!cq->reader) {
    986			mask |= EPOLLIN | EPOLLRDNORM;
    987			break;
    988		}
    989	spin_unlock(&queue_lock);
    990	return mask;
    991}
    992
    993static int cache_ioctl(struct inode *ino, struct file *filp,
    994		       unsigned int cmd, unsigned long arg,
    995		       struct cache_detail *cd)
    996{
    997	int len = 0;
    998	struct cache_reader *rp = filp->private_data;
    999	struct cache_queue *cq;
   1000
   1001	if (cmd != FIONREAD || !rp)
   1002		return -EINVAL;
   1003
   1004	spin_lock(&queue_lock);
   1005
   1006	/* only find the length remaining in current request,
   1007	 * or the length of the next request
   1008	 */
   1009	for (cq= &rp->q; &cq->list != &cd->queue;
   1010	     cq = list_entry(cq->list.next, struct cache_queue, list))
   1011		if (!cq->reader) {
   1012			struct cache_request *cr =
   1013				container_of(cq, struct cache_request, q);
   1014			len = cr->len - rp->offset;
   1015			break;
   1016		}
   1017	spin_unlock(&queue_lock);
   1018
   1019	return put_user(len, (int __user *)arg);
   1020}
   1021
   1022static int cache_open(struct inode *inode, struct file *filp,
   1023		      struct cache_detail *cd)
   1024{
   1025	struct cache_reader *rp = NULL;
   1026
   1027	if (!cd || !try_module_get(cd->owner))
   1028		return -EACCES;
   1029	nonseekable_open(inode, filp);
   1030	if (filp->f_mode & FMODE_READ) {
   1031		rp = kmalloc(sizeof(*rp), GFP_KERNEL);
   1032		if (!rp) {
   1033			module_put(cd->owner);
   1034			return -ENOMEM;
   1035		}
   1036		rp->offset = 0;
   1037		rp->q.reader = 1;
   1038
   1039		spin_lock(&queue_lock);
   1040		list_add(&rp->q.list, &cd->queue);
   1041		spin_unlock(&queue_lock);
   1042	}
   1043	if (filp->f_mode & FMODE_WRITE)
   1044		atomic_inc(&cd->writers);
   1045	filp->private_data = rp;
   1046	return 0;
   1047}
   1048
   1049static int cache_release(struct inode *inode, struct file *filp,
   1050			 struct cache_detail *cd)
   1051{
   1052	struct cache_reader *rp = filp->private_data;
   1053
   1054	if (rp) {
   1055		spin_lock(&queue_lock);
   1056		if (rp->offset) {
   1057			struct cache_queue *cq;
   1058			for (cq= &rp->q; &cq->list != &cd->queue;
   1059			     cq = list_entry(cq->list.next, struct cache_queue, list))
   1060				if (!cq->reader) {
   1061					container_of(cq, struct cache_request, q)
   1062						->readers--;
   1063					break;
   1064				}
   1065			rp->offset = 0;
   1066		}
   1067		list_del(&rp->q.list);
   1068		spin_unlock(&queue_lock);
   1069
   1070		filp->private_data = NULL;
   1071		kfree(rp);
   1072
   1073	}
   1074	if (filp->f_mode & FMODE_WRITE) {
   1075		atomic_dec(&cd->writers);
   1076		cd->last_close = seconds_since_boot();
   1077	}
   1078	module_put(cd->owner);
   1079	return 0;
   1080}
   1081
   1082
   1083
   1084static void cache_dequeue(struct cache_detail *detail, struct cache_head *ch)
   1085{
   1086	struct cache_queue *cq, *tmp;
   1087	struct cache_request *cr;
   1088	struct list_head dequeued;
   1089
   1090	INIT_LIST_HEAD(&dequeued);
   1091	spin_lock(&queue_lock);
   1092	list_for_each_entry_safe(cq, tmp, &detail->queue, list)
   1093		if (!cq->reader) {
   1094			cr = container_of(cq, struct cache_request, q);
   1095			if (cr->item != ch)
   1096				continue;
   1097			if (test_bit(CACHE_PENDING, &ch->flags))
   1098				/* Lost a race and it is pending again */
   1099				break;
   1100			if (cr->readers != 0)
   1101				continue;
   1102			list_move(&cr->q.list, &dequeued);
   1103		}
   1104	spin_unlock(&queue_lock);
   1105	while (!list_empty(&dequeued)) {
   1106		cr = list_entry(dequeued.next, struct cache_request, q.list);
   1107		list_del(&cr->q.list);
   1108		cache_put(cr->item, detail);
   1109		kfree(cr->buf);
   1110		kfree(cr);
   1111	}
   1112}
   1113
   1114/*
   1115 * Support routines for text-based upcalls.
   1116 * Fields are separated by spaces.
   1117 * Fields are either mangled to quote space tab newline slosh with slosh
   1118 * or a hexified with a leading \x
   1119 * Record is terminated with newline.
   1120 *
   1121 */
   1122
   1123void qword_add(char **bpp, int *lp, char *str)
   1124{
   1125	char *bp = *bpp;
   1126	int len = *lp;
   1127	int ret;
   1128
   1129	if (len < 0) return;
   1130
   1131	ret = string_escape_str(str, bp, len, ESCAPE_OCTAL, "\\ \n\t");
   1132	if (ret >= len) {
   1133		bp += len;
   1134		len = -1;
   1135	} else {
   1136		bp += ret;
   1137		len -= ret;
   1138		*bp++ = ' ';
   1139		len--;
   1140	}
   1141	*bpp = bp;
   1142	*lp = len;
   1143}
   1144EXPORT_SYMBOL_GPL(qword_add);
   1145
   1146void qword_addhex(char **bpp, int *lp, char *buf, int blen)
   1147{
   1148	char *bp = *bpp;
   1149	int len = *lp;
   1150
   1151	if (len < 0) return;
   1152
   1153	if (len > 2) {
   1154		*bp++ = '\\';
   1155		*bp++ = 'x';
   1156		len -= 2;
   1157		while (blen && len >= 2) {
   1158			bp = hex_byte_pack(bp, *buf++);
   1159			len -= 2;
   1160			blen--;
   1161		}
   1162	}
   1163	if (blen || len<1) len = -1;
   1164	else {
   1165		*bp++ = ' ';
   1166		len--;
   1167	}
   1168	*bpp = bp;
   1169	*lp = len;
   1170}
   1171EXPORT_SYMBOL_GPL(qword_addhex);
   1172
   1173static void warn_no_listener(struct cache_detail *detail)
   1174{
   1175	if (detail->last_warn != detail->last_close) {
   1176		detail->last_warn = detail->last_close;
   1177		if (detail->warn_no_listener)
   1178			detail->warn_no_listener(detail, detail->last_close != 0);
   1179	}
   1180}
   1181
   1182static bool cache_listeners_exist(struct cache_detail *detail)
   1183{
   1184	if (atomic_read(&detail->writers))
   1185		return true;
   1186	if (detail->last_close == 0)
   1187		/* This cache was never opened */
   1188		return false;
   1189	if (detail->last_close < seconds_since_boot() - 30)
   1190		/*
   1191		 * We allow for the possibility that someone might
   1192		 * restart a userspace daemon without restarting the
   1193		 * server; but after 30 seconds, we give up.
   1194		 */
   1195		 return false;
   1196	return true;
   1197}
   1198
   1199/*
   1200 * register an upcall request to user-space and queue it up for read() by the
   1201 * upcall daemon.
   1202 *
   1203 * Each request is at most one page long.
   1204 */
   1205static int cache_pipe_upcall(struct cache_detail *detail, struct cache_head *h)
   1206{
   1207	char *buf;
   1208	struct cache_request *crq;
   1209	int ret = 0;
   1210
   1211	if (test_bit(CACHE_CLEANED, &h->flags))
   1212		/* Too late to make an upcall */
   1213		return -EAGAIN;
   1214
   1215	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
   1216	if (!buf)
   1217		return -EAGAIN;
   1218
   1219	crq = kmalloc(sizeof (*crq), GFP_KERNEL);
   1220	if (!crq) {
   1221		kfree(buf);
   1222		return -EAGAIN;
   1223	}
   1224
   1225	crq->q.reader = 0;
   1226	crq->buf = buf;
   1227	crq->len = 0;
   1228	crq->readers = 0;
   1229	spin_lock(&queue_lock);
   1230	if (test_bit(CACHE_PENDING, &h->flags)) {
   1231		crq->item = cache_get(h);
   1232		list_add_tail(&crq->q.list, &detail->queue);
   1233		trace_cache_entry_upcall(detail, h);
   1234	} else
   1235		/* Lost a race, no longer PENDING, so don't enqueue */
   1236		ret = -EAGAIN;
   1237	spin_unlock(&queue_lock);
   1238	wake_up(&queue_wait);
   1239	if (ret == -EAGAIN) {
   1240		kfree(buf);
   1241		kfree(crq);
   1242	}
   1243	return ret;
   1244}
   1245
   1246int sunrpc_cache_pipe_upcall(struct cache_detail *detail, struct cache_head *h)
   1247{
   1248	if (test_and_set_bit(CACHE_PENDING, &h->flags))
   1249		return 0;
   1250	return cache_pipe_upcall(detail, h);
   1251}
   1252EXPORT_SYMBOL_GPL(sunrpc_cache_pipe_upcall);
   1253
   1254int sunrpc_cache_pipe_upcall_timeout(struct cache_detail *detail,
   1255				     struct cache_head *h)
   1256{
   1257	if (!cache_listeners_exist(detail)) {
   1258		warn_no_listener(detail);
   1259		trace_cache_entry_no_listener(detail, h);
   1260		return -EINVAL;
   1261	}
   1262	return sunrpc_cache_pipe_upcall(detail, h);
   1263}
   1264EXPORT_SYMBOL_GPL(sunrpc_cache_pipe_upcall_timeout);
   1265
   1266/*
   1267 * parse a message from user-space and pass it
   1268 * to an appropriate cache
   1269 * Messages are, like requests, separated into fields by
   1270 * spaces and dequotes as \xHEXSTRING or embedded \nnn octal
   1271 *
   1272 * Message is
   1273 *   reply cachename expiry key ... content....
   1274 *
   1275 * key and content are both parsed by cache
   1276 */
   1277
   1278int qword_get(char **bpp, char *dest, int bufsize)
   1279{
   1280	/* return bytes copied, or -1 on error */
   1281	char *bp = *bpp;
   1282	int len = 0;
   1283
   1284	while (*bp == ' ') bp++;
   1285
   1286	if (bp[0] == '\\' && bp[1] == 'x') {
   1287		/* HEX STRING */
   1288		bp += 2;
   1289		while (len < bufsize - 1) {
   1290			int h, l;
   1291
   1292			h = hex_to_bin(bp[0]);
   1293			if (h < 0)
   1294				break;
   1295
   1296			l = hex_to_bin(bp[1]);
   1297			if (l < 0)
   1298				break;
   1299
   1300			*dest++ = (h << 4) | l;
   1301			bp += 2;
   1302			len++;
   1303		}
   1304	} else {
   1305		/* text with \nnn octal quoting */
   1306		while (*bp != ' ' && *bp != '\n' && *bp && len < bufsize-1) {
   1307			if (*bp == '\\' &&
   1308			    isodigit(bp[1]) && (bp[1] <= '3') &&
   1309			    isodigit(bp[2]) &&
   1310			    isodigit(bp[3])) {
   1311				int byte = (*++bp -'0');
   1312				bp++;
   1313				byte = (byte << 3) | (*bp++ - '0');
   1314				byte = (byte << 3) | (*bp++ - '0');
   1315				*dest++ = byte;
   1316				len++;
   1317			} else {
   1318				*dest++ = *bp++;
   1319				len++;
   1320			}
   1321		}
   1322	}
   1323
   1324	if (*bp != ' ' && *bp != '\n' && *bp != '\0')
   1325		return -1;
   1326	while (*bp == ' ') bp++;
   1327	*bpp = bp;
   1328	*dest = '\0';
   1329	return len;
   1330}
   1331EXPORT_SYMBOL_GPL(qword_get);
   1332
   1333
   1334/*
   1335 * support /proc/net/rpc/$CACHENAME/content
   1336 * as a seqfile.
   1337 * We call ->cache_show passing NULL for the item to
   1338 * get a header, then pass each real item in the cache
   1339 */
   1340
   1341static void *__cache_seq_start(struct seq_file *m, loff_t *pos)
   1342{
   1343	loff_t n = *pos;
   1344	unsigned int hash, entry;
   1345	struct cache_head *ch;
   1346	struct cache_detail *cd = m->private;
   1347
   1348	if (!n--)
   1349		return SEQ_START_TOKEN;
   1350	hash = n >> 32;
   1351	entry = n & ((1LL<<32) - 1);
   1352
   1353	hlist_for_each_entry_rcu(ch, &cd->hash_table[hash], cache_list)
   1354		if (!entry--)
   1355			return ch;
   1356	n &= ~((1LL<<32) - 1);
   1357	do {
   1358		hash++;
   1359		n += 1LL<<32;
   1360	} while(hash < cd->hash_size &&
   1361		hlist_empty(&cd->hash_table[hash]));
   1362	if (hash >= cd->hash_size)
   1363		return NULL;
   1364	*pos = n+1;
   1365	return hlist_entry_safe(rcu_dereference_raw(
   1366				hlist_first_rcu(&cd->hash_table[hash])),
   1367				struct cache_head, cache_list);
   1368}
   1369
   1370static void *cache_seq_next(struct seq_file *m, void *p, loff_t *pos)
   1371{
   1372	struct cache_head *ch = p;
   1373	int hash = (*pos >> 32);
   1374	struct cache_detail *cd = m->private;
   1375
   1376	if (p == SEQ_START_TOKEN)
   1377		hash = 0;
   1378	else if (ch->cache_list.next == NULL) {
   1379		hash++;
   1380		*pos += 1LL<<32;
   1381	} else {
   1382		++*pos;
   1383		return hlist_entry_safe(rcu_dereference_raw(
   1384					hlist_next_rcu(&ch->cache_list)),
   1385					struct cache_head, cache_list);
   1386	}
   1387	*pos &= ~((1LL<<32) - 1);
   1388	while (hash < cd->hash_size &&
   1389	       hlist_empty(&cd->hash_table[hash])) {
   1390		hash++;
   1391		*pos += 1LL<<32;
   1392	}
   1393	if (hash >= cd->hash_size)
   1394		return NULL;
   1395	++*pos;
   1396	return hlist_entry_safe(rcu_dereference_raw(
   1397				hlist_first_rcu(&cd->hash_table[hash])),
   1398				struct cache_head, cache_list);
   1399}
   1400
   1401void *cache_seq_start_rcu(struct seq_file *m, loff_t *pos)
   1402	__acquires(RCU)
   1403{
   1404	rcu_read_lock();
   1405	return __cache_seq_start(m, pos);
   1406}
   1407EXPORT_SYMBOL_GPL(cache_seq_start_rcu);
   1408
   1409void *cache_seq_next_rcu(struct seq_file *file, void *p, loff_t *pos)
   1410{
   1411	return cache_seq_next(file, p, pos);
   1412}
   1413EXPORT_SYMBOL_GPL(cache_seq_next_rcu);
   1414
   1415void cache_seq_stop_rcu(struct seq_file *m, void *p)
   1416	__releases(RCU)
   1417{
   1418	rcu_read_unlock();
   1419}
   1420EXPORT_SYMBOL_GPL(cache_seq_stop_rcu);
   1421
   1422static int c_show(struct seq_file *m, void *p)
   1423{
   1424	struct cache_head *cp = p;
   1425	struct cache_detail *cd = m->private;
   1426
   1427	if (p == SEQ_START_TOKEN)
   1428		return cd->cache_show(m, cd, NULL);
   1429
   1430	ifdebug(CACHE)
   1431		seq_printf(m, "# expiry=%lld refcnt=%d flags=%lx\n",
   1432			   convert_to_wallclock(cp->expiry_time),
   1433			   kref_read(&cp->ref), cp->flags);
   1434	cache_get(cp);
   1435	if (cache_check(cd, cp, NULL))
   1436		/* cache_check does a cache_put on failure */
   1437		seq_puts(m, "# ");
   1438	else {
   1439		if (cache_is_expired(cd, cp))
   1440			seq_puts(m, "# ");
   1441		cache_put(cp, cd);
   1442	}
   1443
   1444	return cd->cache_show(m, cd, cp);
   1445}
   1446
   1447static const struct seq_operations cache_content_op = {
   1448	.start	= cache_seq_start_rcu,
   1449	.next	= cache_seq_next_rcu,
   1450	.stop	= cache_seq_stop_rcu,
   1451	.show	= c_show,
   1452};
   1453
   1454static int content_open(struct inode *inode, struct file *file,
   1455			struct cache_detail *cd)
   1456{
   1457	struct seq_file *seq;
   1458	int err;
   1459
   1460	if (!cd || !try_module_get(cd->owner))
   1461		return -EACCES;
   1462
   1463	err = seq_open(file, &cache_content_op);
   1464	if (err) {
   1465		module_put(cd->owner);
   1466		return err;
   1467	}
   1468
   1469	seq = file->private_data;
   1470	seq->private = cd;
   1471	return 0;
   1472}
   1473
   1474static int content_release(struct inode *inode, struct file *file,
   1475		struct cache_detail *cd)
   1476{
   1477	int ret = seq_release(inode, file);
   1478	module_put(cd->owner);
   1479	return ret;
   1480}
   1481
   1482static int open_flush(struct inode *inode, struct file *file,
   1483			struct cache_detail *cd)
   1484{
   1485	if (!cd || !try_module_get(cd->owner))
   1486		return -EACCES;
   1487	return nonseekable_open(inode, file);
   1488}
   1489
   1490static int release_flush(struct inode *inode, struct file *file,
   1491			struct cache_detail *cd)
   1492{
   1493	module_put(cd->owner);
   1494	return 0;
   1495}
   1496
   1497static ssize_t read_flush(struct file *file, char __user *buf,
   1498			  size_t count, loff_t *ppos,
   1499			  struct cache_detail *cd)
   1500{
   1501	char tbuf[22];
   1502	size_t len;
   1503
   1504	len = snprintf(tbuf, sizeof(tbuf), "%llu\n",
   1505			convert_to_wallclock(cd->flush_time));
   1506	return simple_read_from_buffer(buf, count, ppos, tbuf, len);
   1507}
   1508
   1509static ssize_t write_flush(struct file *file, const char __user *buf,
   1510			   size_t count, loff_t *ppos,
   1511			   struct cache_detail *cd)
   1512{
   1513	char tbuf[20];
   1514	char *ep;
   1515	time64_t now;
   1516
   1517	if (*ppos || count > sizeof(tbuf)-1)
   1518		return -EINVAL;
   1519	if (copy_from_user(tbuf, buf, count))
   1520		return -EFAULT;
   1521	tbuf[count] = 0;
   1522	simple_strtoul(tbuf, &ep, 0);
   1523	if (*ep && *ep != '\n')
   1524		return -EINVAL;
   1525	/* Note that while we check that 'buf' holds a valid number,
   1526	 * we always ignore the value and just flush everything.
   1527	 * Making use of the number leads to races.
   1528	 */
   1529
   1530	now = seconds_since_boot();
   1531	/* Always flush everything, so behave like cache_purge()
   1532	 * Do this by advancing flush_time to the current time,
   1533	 * or by one second if it has already reached the current time.
   1534	 * Newly added cache entries will always have ->last_refresh greater
   1535	 * that ->flush_time, so they don't get flushed prematurely.
   1536	 */
   1537
   1538	if (cd->flush_time >= now)
   1539		now = cd->flush_time + 1;
   1540
   1541	cd->flush_time = now;
   1542	cd->nextcheck = now;
   1543	cache_flush();
   1544
   1545	if (cd->flush)
   1546		cd->flush();
   1547
   1548	*ppos += count;
   1549	return count;
   1550}
   1551
   1552static ssize_t cache_read_procfs(struct file *filp, char __user *buf,
   1553				 size_t count, loff_t *ppos)
   1554{
   1555	struct cache_detail *cd = pde_data(file_inode(filp));
   1556
   1557	return cache_read(filp, buf, count, ppos, cd);
   1558}
   1559
   1560static ssize_t cache_write_procfs(struct file *filp, const char __user *buf,
   1561				  size_t count, loff_t *ppos)
   1562{
   1563	struct cache_detail *cd = pde_data(file_inode(filp));
   1564
   1565	return cache_write(filp, buf, count, ppos, cd);
   1566}
   1567
   1568static __poll_t cache_poll_procfs(struct file *filp, poll_table *wait)
   1569{
   1570	struct cache_detail *cd = pde_data(file_inode(filp));
   1571
   1572	return cache_poll(filp, wait, cd);
   1573}
   1574
   1575static long cache_ioctl_procfs(struct file *filp,
   1576			       unsigned int cmd, unsigned long arg)
   1577{
   1578	struct inode *inode = file_inode(filp);
   1579	struct cache_detail *cd = pde_data(inode);
   1580
   1581	return cache_ioctl(inode, filp, cmd, arg, cd);
   1582}
   1583
   1584static int cache_open_procfs(struct inode *inode, struct file *filp)
   1585{
   1586	struct cache_detail *cd = pde_data(inode);
   1587
   1588	return cache_open(inode, filp, cd);
   1589}
   1590
   1591static int cache_release_procfs(struct inode *inode, struct file *filp)
   1592{
   1593	struct cache_detail *cd = pde_data(inode);
   1594
   1595	return cache_release(inode, filp, cd);
   1596}
   1597
   1598static const struct proc_ops cache_channel_proc_ops = {
   1599	.proc_lseek	= no_llseek,
   1600	.proc_read	= cache_read_procfs,
   1601	.proc_write	= cache_write_procfs,
   1602	.proc_poll	= cache_poll_procfs,
   1603	.proc_ioctl	= cache_ioctl_procfs, /* for FIONREAD */
   1604	.proc_open	= cache_open_procfs,
   1605	.proc_release	= cache_release_procfs,
   1606};
   1607
   1608static int content_open_procfs(struct inode *inode, struct file *filp)
   1609{
   1610	struct cache_detail *cd = pde_data(inode);
   1611
   1612	return content_open(inode, filp, cd);
   1613}
   1614
   1615static int content_release_procfs(struct inode *inode, struct file *filp)
   1616{
   1617	struct cache_detail *cd = pde_data(inode);
   1618
   1619	return content_release(inode, filp, cd);
   1620}
   1621
   1622static const struct proc_ops content_proc_ops = {
   1623	.proc_open	= content_open_procfs,
   1624	.proc_read	= seq_read,
   1625	.proc_lseek	= seq_lseek,
   1626	.proc_release	= content_release_procfs,
   1627};
   1628
   1629static int open_flush_procfs(struct inode *inode, struct file *filp)
   1630{
   1631	struct cache_detail *cd = pde_data(inode);
   1632
   1633	return open_flush(inode, filp, cd);
   1634}
   1635
   1636static int release_flush_procfs(struct inode *inode, struct file *filp)
   1637{
   1638	struct cache_detail *cd = pde_data(inode);
   1639
   1640	return release_flush(inode, filp, cd);
   1641}
   1642
   1643static ssize_t read_flush_procfs(struct file *filp, char __user *buf,
   1644			    size_t count, loff_t *ppos)
   1645{
   1646	struct cache_detail *cd = pde_data(file_inode(filp));
   1647
   1648	return read_flush(filp, buf, count, ppos, cd);
   1649}
   1650
   1651static ssize_t write_flush_procfs(struct file *filp,
   1652				  const char __user *buf,
   1653				  size_t count, loff_t *ppos)
   1654{
   1655	struct cache_detail *cd = pde_data(file_inode(filp));
   1656
   1657	return write_flush(filp, buf, count, ppos, cd);
   1658}
   1659
   1660static const struct proc_ops cache_flush_proc_ops = {
   1661	.proc_open	= open_flush_procfs,
   1662	.proc_read	= read_flush_procfs,
   1663	.proc_write	= write_flush_procfs,
   1664	.proc_release	= release_flush_procfs,
   1665	.proc_lseek	= no_llseek,
   1666};
   1667
   1668static void remove_cache_proc_entries(struct cache_detail *cd)
   1669{
   1670	if (cd->procfs) {
   1671		proc_remove(cd->procfs);
   1672		cd->procfs = NULL;
   1673	}
   1674}
   1675
   1676#ifdef CONFIG_PROC_FS
   1677static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
   1678{
   1679	struct proc_dir_entry *p;
   1680	struct sunrpc_net *sn;
   1681
   1682	sn = net_generic(net, sunrpc_net_id);
   1683	cd->procfs = proc_mkdir(cd->name, sn->proc_net_rpc);
   1684	if (cd->procfs == NULL)
   1685		goto out_nomem;
   1686
   1687	p = proc_create_data("flush", S_IFREG | 0600,
   1688			     cd->procfs, &cache_flush_proc_ops, cd);
   1689	if (p == NULL)
   1690		goto out_nomem;
   1691
   1692	if (cd->cache_request || cd->cache_parse) {
   1693		p = proc_create_data("channel", S_IFREG | 0600, cd->procfs,
   1694				     &cache_channel_proc_ops, cd);
   1695		if (p == NULL)
   1696			goto out_nomem;
   1697	}
   1698	if (cd->cache_show) {
   1699		p = proc_create_data("content", S_IFREG | 0400, cd->procfs,
   1700				     &content_proc_ops, cd);
   1701		if (p == NULL)
   1702			goto out_nomem;
   1703	}
   1704	return 0;
   1705out_nomem:
   1706	remove_cache_proc_entries(cd);
   1707	return -ENOMEM;
   1708}
   1709#else /* CONFIG_PROC_FS */
   1710static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
   1711{
   1712	return 0;
   1713}
   1714#endif
   1715
   1716void __init cache_initialize(void)
   1717{
   1718	INIT_DEFERRABLE_WORK(&cache_cleaner, do_cache_clean);
   1719}
   1720
   1721int cache_register_net(struct cache_detail *cd, struct net *net)
   1722{
   1723	int ret;
   1724
   1725	sunrpc_init_cache_detail(cd);
   1726	ret = create_cache_proc_entries(cd, net);
   1727	if (ret)
   1728		sunrpc_destroy_cache_detail(cd);
   1729	return ret;
   1730}
   1731EXPORT_SYMBOL_GPL(cache_register_net);
   1732
   1733void cache_unregister_net(struct cache_detail *cd, struct net *net)
   1734{
   1735	remove_cache_proc_entries(cd);
   1736	sunrpc_destroy_cache_detail(cd);
   1737}
   1738EXPORT_SYMBOL_GPL(cache_unregister_net);
   1739
   1740struct cache_detail *cache_create_net(const struct cache_detail *tmpl, struct net *net)
   1741{
   1742	struct cache_detail *cd;
   1743	int i;
   1744
   1745	cd = kmemdup(tmpl, sizeof(struct cache_detail), GFP_KERNEL);
   1746	if (cd == NULL)
   1747		return ERR_PTR(-ENOMEM);
   1748
   1749	cd->hash_table = kcalloc(cd->hash_size, sizeof(struct hlist_head),
   1750				 GFP_KERNEL);
   1751	if (cd->hash_table == NULL) {
   1752		kfree(cd);
   1753		return ERR_PTR(-ENOMEM);
   1754	}
   1755
   1756	for (i = 0; i < cd->hash_size; i++)
   1757		INIT_HLIST_HEAD(&cd->hash_table[i]);
   1758	cd->net = net;
   1759	return cd;
   1760}
   1761EXPORT_SYMBOL_GPL(cache_create_net);
   1762
   1763void cache_destroy_net(struct cache_detail *cd, struct net *net)
   1764{
   1765	kfree(cd->hash_table);
   1766	kfree(cd);
   1767}
   1768EXPORT_SYMBOL_GPL(cache_destroy_net);
   1769
   1770static ssize_t cache_read_pipefs(struct file *filp, char __user *buf,
   1771				 size_t count, loff_t *ppos)
   1772{
   1773	struct cache_detail *cd = RPC_I(file_inode(filp))->private;
   1774
   1775	return cache_read(filp, buf, count, ppos, cd);
   1776}
   1777
   1778static ssize_t cache_write_pipefs(struct file *filp, const char __user *buf,
   1779				  size_t count, loff_t *ppos)
   1780{
   1781	struct cache_detail *cd = RPC_I(file_inode(filp))->private;
   1782
   1783	return cache_write(filp, buf, count, ppos, cd);
   1784}
   1785
   1786static __poll_t cache_poll_pipefs(struct file *filp, poll_table *wait)
   1787{
   1788	struct cache_detail *cd = RPC_I(file_inode(filp))->private;
   1789
   1790	return cache_poll(filp, wait, cd);
   1791}
   1792
   1793static long cache_ioctl_pipefs(struct file *filp,
   1794			      unsigned int cmd, unsigned long arg)
   1795{
   1796	struct inode *inode = file_inode(filp);
   1797	struct cache_detail *cd = RPC_I(inode)->private;
   1798
   1799	return cache_ioctl(inode, filp, cmd, arg, cd);
   1800}
   1801
   1802static int cache_open_pipefs(struct inode *inode, struct file *filp)
   1803{
   1804	struct cache_detail *cd = RPC_I(inode)->private;
   1805
   1806	return cache_open(inode, filp, cd);
   1807}
   1808
   1809static int cache_release_pipefs(struct inode *inode, struct file *filp)
   1810{
   1811	struct cache_detail *cd = RPC_I(inode)->private;
   1812
   1813	return cache_release(inode, filp, cd);
   1814}
   1815
   1816const struct file_operations cache_file_operations_pipefs = {
   1817	.owner		= THIS_MODULE,
   1818	.llseek		= no_llseek,
   1819	.read		= cache_read_pipefs,
   1820	.write		= cache_write_pipefs,
   1821	.poll		= cache_poll_pipefs,
   1822	.unlocked_ioctl	= cache_ioctl_pipefs, /* for FIONREAD */
   1823	.open		= cache_open_pipefs,
   1824	.release	= cache_release_pipefs,
   1825};
   1826
   1827static int content_open_pipefs(struct inode *inode, struct file *filp)
   1828{
   1829	struct cache_detail *cd = RPC_I(inode)->private;
   1830
   1831	return content_open(inode, filp, cd);
   1832}
   1833
   1834static int content_release_pipefs(struct inode *inode, struct file *filp)
   1835{
   1836	struct cache_detail *cd = RPC_I(inode)->private;
   1837
   1838	return content_release(inode, filp, cd);
   1839}
   1840
   1841const struct file_operations content_file_operations_pipefs = {
   1842	.open		= content_open_pipefs,
   1843	.read		= seq_read,
   1844	.llseek		= seq_lseek,
   1845	.release	= content_release_pipefs,
   1846};
   1847
   1848static int open_flush_pipefs(struct inode *inode, struct file *filp)
   1849{
   1850	struct cache_detail *cd = RPC_I(inode)->private;
   1851
   1852	return open_flush(inode, filp, cd);
   1853}
   1854
   1855static int release_flush_pipefs(struct inode *inode, struct file *filp)
   1856{
   1857	struct cache_detail *cd = RPC_I(inode)->private;
   1858
   1859	return release_flush(inode, filp, cd);
   1860}
   1861
   1862static ssize_t read_flush_pipefs(struct file *filp, char __user *buf,
   1863			    size_t count, loff_t *ppos)
   1864{
   1865	struct cache_detail *cd = RPC_I(file_inode(filp))->private;
   1866
   1867	return read_flush(filp, buf, count, ppos, cd);
   1868}
   1869
   1870static ssize_t write_flush_pipefs(struct file *filp,
   1871				  const char __user *buf,
   1872				  size_t count, loff_t *ppos)
   1873{
   1874	struct cache_detail *cd = RPC_I(file_inode(filp))->private;
   1875
   1876	return write_flush(filp, buf, count, ppos, cd);
   1877}
   1878
   1879const struct file_operations cache_flush_operations_pipefs = {
   1880	.open		= open_flush_pipefs,
   1881	.read		= read_flush_pipefs,
   1882	.write		= write_flush_pipefs,
   1883	.release	= release_flush_pipefs,
   1884	.llseek		= no_llseek,
   1885};
   1886
   1887int sunrpc_cache_register_pipefs(struct dentry *parent,
   1888				 const char *name, umode_t umode,
   1889				 struct cache_detail *cd)
   1890{
   1891	struct dentry *dir = rpc_create_cache_dir(parent, name, umode, cd);
   1892	if (IS_ERR(dir))
   1893		return PTR_ERR(dir);
   1894	cd->pipefs = dir;
   1895	return 0;
   1896}
   1897EXPORT_SYMBOL_GPL(sunrpc_cache_register_pipefs);
   1898
   1899void sunrpc_cache_unregister_pipefs(struct cache_detail *cd)
   1900{
   1901	if (cd->pipefs) {
   1902		rpc_remove_cache_dir(cd->pipefs);
   1903		cd->pipefs = NULL;
   1904	}
   1905}
   1906EXPORT_SYMBOL_GPL(sunrpc_cache_unregister_pipefs);
   1907
   1908void sunrpc_cache_unhash(struct cache_detail *cd, struct cache_head *h)
   1909{
   1910	spin_lock(&cd->hash_lock);
   1911	if (!hlist_unhashed(&h->cache_list)){
   1912		sunrpc_begin_cache_remove_entry(h, cd);
   1913		spin_unlock(&cd->hash_lock);
   1914		sunrpc_end_cache_remove_entry(h, cd);
   1915	} else
   1916		spin_unlock(&cd->hash_lock);
   1917}
   1918EXPORT_SYMBOL_GPL(sunrpc_cache_unhash);