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

nfs_fs.h (18433B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 *  linux/include/linux/nfs_fs.h
      4 *
      5 *  Copyright (C) 1992  Rick Sladkey
      6 *
      7 *  OS-specific nfs filesystem definitions and declarations
      8 */
      9#ifndef _LINUX_NFS_FS_H
     10#define _LINUX_NFS_FS_H
     11
     12#include <uapi/linux/nfs_fs.h>
     13
     14
     15/*
     16 * Enable dprintk() debugging support for nfs client.
     17 */
     18#ifdef CONFIG_NFS_DEBUG
     19# define NFS_DEBUG
     20#endif
     21
     22#include <linux/in.h>
     23#include <linux/mm.h>
     24#include <linux/pagemap.h>
     25#include <linux/rbtree.h>
     26#include <linux/refcount.h>
     27#include <linux/rwsem.h>
     28#include <linux/wait.h>
     29
     30#include <linux/sunrpc/debug.h>
     31#include <linux/sunrpc/auth.h>
     32#include <linux/sunrpc/clnt.h>
     33
     34#include <linux/nfs.h>
     35#include <linux/nfs2.h>
     36#include <linux/nfs3.h>
     37#include <linux/nfs4.h>
     38#include <linux/nfs_xdr.h>
     39#include <linux/nfs_fs_sb.h>
     40
     41#include <linux/mempool.h>
     42
     43/*
     44 * These are the default for number of transports to different server IPs
     45 */
     46#define NFS_MAX_TRANSPORTS 16
     47
     48/*
     49 * Size of the NFS directory verifier
     50 */
     51#define NFS_DIR_VERIFIER_SIZE		2
     52
     53/*
     54 * NFSv3/v4 Access mode cache entry
     55 */
     56struct nfs_access_entry {
     57	struct rb_node		rb_node;
     58	struct list_head	lru;
     59	kuid_t			fsuid;
     60	kgid_t			fsgid;
     61	struct group_info	*group_info;
     62	__u32			mask;
     63	struct rcu_head		rcu_head;
     64};
     65
     66struct nfs_lock_context {
     67	refcount_t count;
     68	struct list_head list;
     69	struct nfs_open_context *open_context;
     70	fl_owner_t lockowner;
     71	atomic_t io_count;
     72	struct rcu_head	rcu_head;
     73};
     74
     75struct nfs4_state;
     76struct nfs_open_context {
     77	struct nfs_lock_context lock_context;
     78	fl_owner_t flock_owner;
     79	struct dentry *dentry;
     80	const struct cred *cred;
     81	struct rpc_cred __rcu *ll_cred;	/* low-level cred - use to check for expiry */
     82	struct nfs4_state *state;
     83	fmode_t mode;
     84
     85	unsigned long flags;
     86#define NFS_CONTEXT_RESEND_WRITES	(1)
     87#define NFS_CONTEXT_BAD			(2)
     88#define NFS_CONTEXT_UNLOCK	(3)
     89#define NFS_CONTEXT_FILE_OPEN		(4)
     90	int error;
     91
     92	struct list_head list;
     93	struct nfs4_threshold	*mdsthreshold;
     94	struct rcu_head	rcu_head;
     95};
     96
     97struct nfs_open_dir_context {
     98	struct list_head list;
     99	atomic_t cache_hits;
    100	atomic_t cache_misses;
    101	unsigned long attr_gencount;
    102	__be32	verf[NFS_DIR_VERIFIER_SIZE];
    103	__u64 dir_cookie;
    104	__u64 last_cookie;
    105	pgoff_t page_index;
    106	unsigned int dtsize;
    107	bool force_clear;
    108	bool eof;
    109	struct rcu_head rcu_head;
    110};
    111
    112/*
    113 * NFSv4 delegation
    114 */
    115struct nfs_delegation;
    116
    117struct posix_acl;
    118
    119struct nfs4_xattr_cache;
    120
    121/*
    122 * nfs fs inode data in memory
    123 */
    124struct nfs_inode {
    125	/*
    126	 * The 64bit 'inode number'
    127	 */
    128	__u64 fileid;
    129
    130	/*
    131	 * NFS file handle
    132	 */
    133	struct nfs_fh		fh;
    134
    135	/*
    136	 * Various flags
    137	 */
    138	unsigned long		flags;			/* atomic bit ops */
    139	unsigned long		cache_validity;		/* bit mask */
    140
    141	/*
    142	 * read_cache_jiffies is when we started read-caching this inode.
    143	 * attrtimeo is for how long the cached information is assumed
    144	 * to be valid. A successful attribute revalidation doubles
    145	 * attrtimeo (up to acregmax/acdirmax), a failure resets it to
    146	 * acregmin/acdirmin.
    147	 *
    148	 * We need to revalidate the cached attrs for this inode if
    149	 *
    150	 *	jiffies - read_cache_jiffies >= attrtimeo
    151	 *
    152	 * Please note the comparison is greater than or equal
    153	 * so that zero timeout values can be specified.
    154	 */
    155	unsigned long		read_cache_jiffies;
    156	unsigned long		attrtimeo;
    157	unsigned long		attrtimeo_timestamp;
    158
    159	unsigned long		attr_gencount;
    160
    161	struct rb_root		access_cache;
    162	struct list_head	access_cache_entry_lru;
    163	struct list_head	access_cache_inode_lru;
    164
    165	union {
    166		/* Directory */
    167		struct {
    168			/* "Generation counter" for the attribute cache.
    169			 * This is bumped whenever we update the metadata
    170			 * on the server.
    171			 */
    172			unsigned long	cache_change_attribute;
    173			/*
    174			 * This is the cookie verifier used for NFSv3 readdir
    175			 * operations
    176			 */
    177			__be32		cookieverf[NFS_DIR_VERIFIER_SIZE];
    178			/* Readers: in-flight sillydelete RPC calls */
    179			/* Writers: rmdir */
    180			struct rw_semaphore	rmdir_sem;
    181		};
    182		/* Regular file */
    183		struct {
    184			atomic_long_t	nrequests;
    185			struct nfs_mds_commit_info commit_info;
    186			struct mutex	commit_mutex;
    187		};
    188	};
    189
    190	/* Open contexts for shared mmap writes */
    191	struct list_head	open_files;
    192
    193#if IS_ENABLED(CONFIG_NFS_V4)
    194	struct nfs4_cached_acl	*nfs4_acl;
    195        /* NFSv4 state */
    196	struct list_head	open_states;
    197	struct nfs_delegation __rcu *delegation;
    198	struct rw_semaphore	rwsem;
    199
    200	/* pNFS layout information */
    201	struct pnfs_layout_hdr *layout;
    202#endif /* CONFIG_NFS_V4*/
    203	/* how many bytes have been written/read and how many bytes queued up */
    204	__u64 write_io;
    205	__u64 read_io;
    206#ifdef CONFIG_NFS_FSCACHE
    207	struct fscache_cookie	*fscache;
    208#endif
    209	struct inode		vfs_inode;
    210
    211#ifdef CONFIG_NFS_V4_2
    212	struct nfs4_xattr_cache *xattr_cache;
    213#endif
    214};
    215
    216struct nfs4_copy_state {
    217	struct list_head	copies;
    218	struct list_head	src_copies;
    219	nfs4_stateid		stateid;
    220	struct completion	completion;
    221	uint64_t		count;
    222	struct nfs_writeverf	verf;
    223	int			error;
    224	int			flags;
    225	struct nfs4_state	*parent_src_state;
    226	struct nfs4_state	*parent_dst_state;
    227};
    228
    229/*
    230 * Access bit flags
    231 */
    232#define NFS_ACCESS_READ        0x0001
    233#define NFS_ACCESS_LOOKUP      0x0002
    234#define NFS_ACCESS_MODIFY      0x0004
    235#define NFS_ACCESS_EXTEND      0x0008
    236#define NFS_ACCESS_DELETE      0x0010
    237#define NFS_ACCESS_EXECUTE     0x0020
    238#define NFS_ACCESS_XAREAD      0x0040
    239#define NFS_ACCESS_XAWRITE     0x0080
    240#define NFS_ACCESS_XALIST      0x0100
    241
    242/*
    243 * Cache validity bit flags
    244 */
    245#define NFS_INO_INVALID_DATA	BIT(1)		/* cached data is invalid */
    246#define NFS_INO_INVALID_ATIME	BIT(2)		/* cached atime is invalid */
    247#define NFS_INO_INVALID_ACCESS	BIT(3)		/* cached access cred invalid */
    248#define NFS_INO_INVALID_ACL	BIT(4)		/* cached acls are invalid */
    249#define NFS_INO_REVAL_FORCED	BIT(6)		/* force revalidation ignoring a delegation */
    250#define NFS_INO_INVALID_LABEL	BIT(7)		/* cached label is invalid */
    251#define NFS_INO_INVALID_CHANGE	BIT(8)		/* cached change is invalid */
    252#define NFS_INO_INVALID_CTIME	BIT(9)		/* cached ctime is invalid */
    253#define NFS_INO_INVALID_MTIME	BIT(10)		/* cached mtime is invalid */
    254#define NFS_INO_INVALID_SIZE	BIT(11)		/* cached size is invalid */
    255#define NFS_INO_INVALID_OTHER	BIT(12)		/* other attrs are invalid */
    256#define NFS_INO_DATA_INVAL_DEFER	\
    257				BIT(13)		/* Deferred cache invalidation */
    258#define NFS_INO_INVALID_BLOCKS	BIT(14)         /* cached blocks are invalid */
    259#define NFS_INO_INVALID_XATTR	BIT(15)		/* xattrs are invalid */
    260#define NFS_INO_INVALID_NLINK	BIT(16)		/* cached nlinks is invalid */
    261#define NFS_INO_INVALID_MODE	BIT(17)		/* cached mode is invalid */
    262
    263#define NFS_INO_INVALID_ATTR	(NFS_INO_INVALID_CHANGE \
    264		| NFS_INO_INVALID_CTIME \
    265		| NFS_INO_INVALID_MTIME \
    266		| NFS_INO_INVALID_SIZE \
    267		| NFS_INO_INVALID_NLINK \
    268		| NFS_INO_INVALID_MODE \
    269		| NFS_INO_INVALID_OTHER)	/* inode metadata is invalid */
    270
    271/*
    272 * Bit offsets in flags field
    273 */
    274#define NFS_INO_STALE		(1)		/* possible stale inode */
    275#define NFS_INO_ACL_LRU_SET	(2)		/* Inode is on the LRU list */
    276#define NFS_INO_INVALIDATING	(3)		/* inode is being invalidated */
    277#define NFS_INO_PRESERVE_UNLINKED (4)		/* preserve file if removed while open */
    278#define NFS_INO_FSCACHE		(5)		/* inode can be cached by FS-Cache */
    279#define NFS_INO_LAYOUTCOMMIT	(9)		/* layoutcommit required */
    280#define NFS_INO_LAYOUTCOMMITTING (10)		/* layoutcommit inflight */
    281#define NFS_INO_LAYOUTSTATS	(11)		/* layoutstats inflight */
    282#define NFS_INO_ODIRECT		(12)		/* I/O setting is O_DIRECT */
    283
    284static inline struct nfs_inode *NFS_I(const struct inode *inode)
    285{
    286	return container_of(inode, struct nfs_inode, vfs_inode);
    287}
    288
    289static inline struct nfs_server *NFS_SB(const struct super_block *s)
    290{
    291	return (struct nfs_server *)(s->s_fs_info);
    292}
    293
    294static inline struct nfs_fh *NFS_FH(const struct inode *inode)
    295{
    296	return &NFS_I(inode)->fh;
    297}
    298
    299static inline struct nfs_server *NFS_SERVER(const struct inode *inode)
    300{
    301	return NFS_SB(inode->i_sb);
    302}
    303
    304static inline struct rpc_clnt *NFS_CLIENT(const struct inode *inode)
    305{
    306	return NFS_SERVER(inode)->client;
    307}
    308
    309static inline const struct nfs_rpc_ops *NFS_PROTO(const struct inode *inode)
    310{
    311	return NFS_SERVER(inode)->nfs_client->rpc_ops;
    312}
    313
    314static inline unsigned NFS_MINATTRTIMEO(const struct inode *inode)
    315{
    316	struct nfs_server *nfss = NFS_SERVER(inode);
    317	return S_ISDIR(inode->i_mode) ? nfss->acdirmin : nfss->acregmin;
    318}
    319
    320static inline unsigned NFS_MAXATTRTIMEO(const struct inode *inode)
    321{
    322	struct nfs_server *nfss = NFS_SERVER(inode);
    323	return S_ISDIR(inode->i_mode) ? nfss->acdirmax : nfss->acregmax;
    324}
    325
    326static inline int NFS_STALE(const struct inode *inode)
    327{
    328	return test_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
    329}
    330
    331static inline struct fscache_cookie *nfs_i_fscache(struct inode *inode)
    332{
    333#ifdef CONFIG_NFS_FSCACHE
    334	return NFS_I(inode)->fscache;
    335#else
    336	return NULL;
    337#endif
    338}
    339
    340static inline __u64 NFS_FILEID(const struct inode *inode)
    341{
    342	return NFS_I(inode)->fileid;
    343}
    344
    345static inline void set_nfs_fileid(struct inode *inode, __u64 fileid)
    346{
    347	NFS_I(inode)->fileid = fileid;
    348}
    349
    350static inline void nfs_mark_for_revalidate(struct inode *inode)
    351{
    352	struct nfs_inode *nfsi = NFS_I(inode);
    353
    354	spin_lock(&inode->i_lock);
    355	nfsi->cache_validity |= NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL |
    356				NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_CTIME |
    357				NFS_INO_INVALID_SIZE;
    358	if (S_ISDIR(inode->i_mode))
    359		nfsi->cache_validity |= NFS_INO_INVALID_DATA;
    360	spin_unlock(&inode->i_lock);
    361}
    362
    363static inline int nfs_server_capable(const struct inode *inode, int cap)
    364{
    365	return NFS_SERVER(inode)->caps & cap;
    366}
    367
    368/**
    369 * nfs_save_change_attribute - Returns the inode attribute change cookie
    370 * @dir - pointer to parent directory inode
    371 * The "cache change attribute" is updated when we need to revalidate
    372 * our dentry cache after a directory was seen to change on the server.
    373 */
    374static inline unsigned long nfs_save_change_attribute(struct inode *dir)
    375{
    376	return NFS_I(dir)->cache_change_attribute;
    377}
    378
    379/*
    380 * linux/fs/nfs/inode.c
    381 */
    382extern int nfs_sync_mapping(struct address_space *mapping);
    383extern void nfs_zap_mapping(struct inode *inode, struct address_space *mapping);
    384extern void nfs_zap_caches(struct inode *);
    385extern void nfs_set_inode_stale(struct inode *inode);
    386extern void nfs_invalidate_atime(struct inode *);
    387extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *,
    388				struct nfs_fattr *);
    389struct inode *nfs_ilookup(struct super_block *sb, struct nfs_fattr *, struct nfs_fh *);
    390extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *);
    391extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr);
    392extern int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr);
    393extern int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr);
    394extern int nfs_getattr(struct user_namespace *, const struct path *,
    395		       struct kstat *, u32, unsigned int);
    396extern void nfs_access_add_cache(struct inode *, struct nfs_access_entry *, const struct cred *);
    397extern void nfs_access_set_mask(struct nfs_access_entry *, u32);
    398extern int nfs_permission(struct user_namespace *, struct inode *, int);
    399extern int nfs_open(struct inode *, struct file *);
    400extern int nfs_attribute_cache_expired(struct inode *inode);
    401extern int nfs_revalidate_inode(struct inode *inode, unsigned long flags);
    402extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *);
    403extern int nfs_clear_invalid_mapping(struct address_space *mapping);
    404extern bool nfs_mapping_need_revalidate_inode(struct inode *inode);
    405extern int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping);
    406extern int nfs_revalidate_mapping_rcu(struct inode *inode);
    407extern int nfs_setattr(struct user_namespace *, struct dentry *, struct iattr *);
    408extern void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr, struct nfs_fattr *);
    409extern void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr);
    410extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx);
    411extern void put_nfs_open_context(struct nfs_open_context *ctx);
    412extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, const struct cred *cred, fmode_t mode);
    413extern struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f_mode, struct file *filp);
    414extern void nfs_inode_attach_open_context(struct nfs_open_context *ctx);
    415extern void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx);
    416extern void nfs_file_clear_open_context(struct file *flip);
    417extern struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx);
    418extern void nfs_put_lock_context(struct nfs_lock_context *l_ctx);
    419extern u64 nfs_compat_user_ino64(u64 fileid);
    420extern void nfs_fattr_init(struct nfs_fattr *fattr);
    421extern void nfs_fattr_set_barrier(struct nfs_fattr *fattr);
    422extern unsigned long nfs_inc_attr_generation_counter(void);
    423
    424extern struct nfs_fattr *nfs_alloc_fattr(void);
    425extern struct nfs_fattr *nfs_alloc_fattr_with_label(struct nfs_server *server);
    426
    427static inline void nfs4_label_free(struct nfs4_label *label)
    428{
    429#ifdef CONFIG_NFS_V4_SECURITY_LABEL
    430	if (label) {
    431		kfree(label->label);
    432		kfree(label);
    433	}
    434#endif
    435}
    436
    437static inline void nfs_free_fattr(const struct nfs_fattr *fattr)
    438{
    439	if (fattr)
    440		nfs4_label_free(fattr->label);
    441	kfree(fattr);
    442}
    443
    444extern struct nfs_fh *nfs_alloc_fhandle(void);
    445
    446static inline void nfs_free_fhandle(const struct nfs_fh *fh)
    447{
    448	kfree(fh);
    449}
    450
    451#ifdef NFS_DEBUG
    452extern u32 _nfs_display_fhandle_hash(const struct nfs_fh *fh);
    453static inline u32 nfs_display_fhandle_hash(const struct nfs_fh *fh)
    454{
    455	return _nfs_display_fhandle_hash(fh);
    456}
    457extern void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption);
    458#define nfs_display_fhandle(fh, caption)			\
    459	do {							\
    460		if (unlikely(nfs_debug & NFSDBG_FACILITY))	\
    461			_nfs_display_fhandle(fh, caption);	\
    462	} while (0)
    463#else
    464static inline u32 nfs_display_fhandle_hash(const struct nfs_fh *fh)
    465{
    466	return 0;
    467}
    468static inline void nfs_display_fhandle(const struct nfs_fh *fh,
    469				       const char *caption)
    470{
    471}
    472#endif
    473
    474/*
    475 * linux/fs/nfs/nfsroot.c
    476 */
    477extern int  nfs_root_data(char **root_device, char **root_data); /*__init*/
    478/* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */
    479extern __be32 root_nfs_parse_addr(char *name); /*__init*/
    480
    481/*
    482 * linux/fs/nfs/file.c
    483 */
    484extern const struct file_operations nfs_file_operations;
    485#if IS_ENABLED(CONFIG_NFS_V4)
    486extern const struct file_operations nfs4_file_operations;
    487#endif /* CONFIG_NFS_V4 */
    488extern const struct address_space_operations nfs_file_aops;
    489extern const struct address_space_operations nfs_dir_aops;
    490
    491static inline struct nfs_open_context *nfs_file_open_context(struct file *filp)
    492{
    493	return filp->private_data;
    494}
    495
    496static inline const struct cred *nfs_file_cred(struct file *file)
    497{
    498	if (file != NULL) {
    499		struct nfs_open_context *ctx =
    500			nfs_file_open_context(file);
    501		if (ctx)
    502			return ctx->cred;
    503	}
    504	return NULL;
    505}
    506
    507/*
    508 * linux/fs/nfs/direct.c
    509 */
    510int nfs_swap_rw(struct kiocb *iocb, struct iov_iter *iter);
    511ssize_t nfs_file_direct_read(struct kiocb *iocb,
    512			     struct iov_iter *iter, bool swap);
    513ssize_t nfs_file_direct_write(struct kiocb *iocb,
    514			      struct iov_iter *iter, bool swap);
    515
    516/*
    517 * linux/fs/nfs/dir.c
    518 */
    519extern const struct file_operations nfs_dir_operations;
    520extern const struct dentry_operations nfs_dentry_operations;
    521
    522extern void nfs_force_lookup_revalidate(struct inode *dir);
    523extern void nfs_set_verifier(struct dentry * dentry, unsigned long verf);
    524#if IS_ENABLED(CONFIG_NFS_V4)
    525extern void nfs_clear_verifier_delegated(struct inode *inode);
    526#endif /* IS_ENABLED(CONFIG_NFS_V4) */
    527extern struct dentry *nfs_add_or_obtain(struct dentry *dentry,
    528			struct nfs_fh *fh, struct nfs_fattr *fattr);
    529extern int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fh,
    530			struct nfs_fattr *fattr);
    531extern int nfs_may_open(struct inode *inode, const struct cred *cred, int openflags);
    532extern void nfs_access_zap_cache(struct inode *inode);
    533extern int nfs_access_get_cached(struct inode *inode, const struct cred *cred,
    534				 u32 *mask, bool may_block);
    535
    536/*
    537 * linux/fs/nfs/symlink.c
    538 */
    539extern const struct inode_operations nfs_symlink_inode_operations;
    540
    541/*
    542 * linux/fs/nfs/sysctl.c
    543 */
    544#ifdef CONFIG_SYSCTL
    545extern int nfs_register_sysctl(void);
    546extern void nfs_unregister_sysctl(void);
    547#else
    548#define nfs_register_sysctl() 0
    549#define nfs_unregister_sysctl() do { } while(0)
    550#endif
    551
    552/*
    553 * linux/fs/nfs/namespace.c
    554 */
    555extern const struct inode_operations nfs_mountpoint_inode_operations;
    556extern const struct inode_operations nfs_referral_inode_operations;
    557extern int nfs_mountpoint_expiry_timeout;
    558extern void nfs_release_automount_timer(void);
    559
    560/*
    561 * linux/fs/nfs/unlink.c
    562 */
    563extern void nfs_complete_unlink(struct dentry *dentry, struct inode *);
    564
    565/*
    566 * linux/fs/nfs/write.c
    567 */
    568extern int  nfs_congestion_kb;
    569extern int  nfs_writepage(struct page *page, struct writeback_control *wbc);
    570extern int  nfs_writepages(struct address_space *, struct writeback_control *);
    571extern int  nfs_flush_incompatible(struct file *file, struct page *page);
    572extern int  nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int);
    573
    574/*
    575 * Try to write back everything synchronously (but check the
    576 * return value!)
    577 */
    578extern int nfs_sync_inode(struct inode *inode);
    579extern int nfs_wb_all(struct inode *inode);
    580extern int nfs_wb_page(struct inode *inode, struct page *page);
    581int nfs_wb_folio_cancel(struct inode *inode, struct folio *folio);
    582extern int  nfs_commit_inode(struct inode *, int);
    583extern struct nfs_commit_data *nfs_commitdata_alloc(void);
    584extern void nfs_commit_free(struct nfs_commit_data *data);
    585bool nfs_commit_end(struct nfs_mds_commit_info *cinfo);
    586
    587static inline bool nfs_have_writebacks(const struct inode *inode)
    588{
    589	if (S_ISREG(inode->i_mode))
    590		return atomic_long_read(&NFS_I(inode)->nrequests) != 0;
    591	return false;
    592}
    593
    594/*
    595 * linux/fs/nfs/read.c
    596 */
    597int  nfs_read_folio(struct file *, struct folio *);
    598void nfs_readahead(struct readahead_control *);
    599
    600/*
    601 * inline functions
    602 */
    603
    604static inline loff_t nfs_size_to_loff_t(__u64 size)
    605{
    606	return min_t(u64, size, OFFSET_MAX);
    607}
    608
    609static inline ino_t
    610nfs_fileid_to_ino_t(u64 fileid)
    611{
    612	ino_t ino = (ino_t) fileid;
    613	if (sizeof(ino_t) < sizeof(u64))
    614		ino ^= fileid >> (sizeof(u64)-sizeof(ino_t)) * 8;
    615	return ino;
    616}
    617
    618#define NFS_JUKEBOX_RETRY_TIME (5 * HZ)
    619
    620
    621# undef ifdebug
    622# ifdef NFS_DEBUG
    623#  define ifdebug(fac)		if (unlikely(nfs_debug & NFSDBG_##fac))
    624#  define NFS_IFDEBUG(x)	x
    625# else
    626#  define ifdebug(fac)		if (0)
    627#  define NFS_IFDEBUG(x)
    628# endif
    629#endif