162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Helper routines for the NFS client caches
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2009 Trond Myklebust <Trond.Myklebust@netapp.com>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/completion.h>
962306a36Sopenharmony_ci#include <linux/sunrpc/cache.h>
1062306a36Sopenharmony_ci#include <linux/atomic.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/*
1362306a36Sopenharmony_ci * Deferred request handling
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_cistruct nfs_cache_defer_req {
1662306a36Sopenharmony_ci	struct cache_req req;
1762306a36Sopenharmony_ci	struct cache_deferred_req deferred_req;
1862306a36Sopenharmony_ci	struct completion completion;
1962306a36Sopenharmony_ci	refcount_t count;
2062306a36Sopenharmony_ci};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ciextern int nfs_cache_upcall(struct cache_detail *cd, char *entry_name);
2362306a36Sopenharmony_ciextern struct nfs_cache_defer_req *nfs_cache_defer_req_alloc(void);
2462306a36Sopenharmony_ciextern void nfs_cache_defer_req_put(struct nfs_cache_defer_req *dreq);
2562306a36Sopenharmony_ciextern int nfs_cache_wait_for_upcall(struct nfs_cache_defer_req *dreq);
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciextern int nfs_cache_register_net(struct net *net, struct cache_detail *cd);
2862306a36Sopenharmony_ciextern void nfs_cache_unregister_net(struct net *net, struct cache_detail *cd);
2962306a36Sopenharmony_ciextern int nfs_cache_register_sb(struct super_block *sb,
3062306a36Sopenharmony_ci				 struct cache_detail *cd);
3162306a36Sopenharmony_ciextern void nfs_cache_unregister_sb(struct super_block *sb,
3262306a36Sopenharmony_ci				    struct cache_detail *cd);
33