nfs_fs.h
来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 730 行 · 第 1/2 页
H
730 行
/* * linux/include/linux/nfs_fs.h * * Copyright (C) 1992 Rick Sladkey * * OS-specific nfs filesystem definitions and declarations */#ifndef _LINUX_NFS_FS_H#define _LINUX_NFS_FS_H#include <linux/config.h>#include <linux/in.h>#include <linux/mm.h>#include <linux/pagemap.h>#include <linux/rwsem.h>#include <linux/wait.h>#include <linux/uio.h>#include <linux/nfs_fs_sb.h>#include <linux/sunrpc/debug.h>#include <linux/sunrpc/auth.h>#include <linux/sunrpc/clnt.h>#include <linux/nfs.h>#include <linux/nfs2.h>#include <linux/nfs3.h>#include <linux/nfs4.h>#include <linux/nfs_xdr.h>#include <linux/rwsem.h>#include <linux/workqueue.h>/* * Enable debugging support for nfs client. * Requires RPC_DEBUG. */#ifdef RPC_DEBUG# define NFS_DEBUG#endif#define NFS_MAX_FILE_IO_BUFFER_SIZE 32768#define NFS_DEF_FILE_IO_BUFFER_SIZE 4096/* * The upper limit on timeouts for the exponential backoff algorithm. */#define NFS_WRITEBACK_DELAY (5*HZ)#define NFS_WRITEBACK_LOCKDELAY (60*HZ)#define NFS_COMMIT_DELAY (5*HZ)/* * superblock magic number for NFS */#define NFS_SUPER_MAGIC 0x6969/* * These are the default flags for swap requests */#define NFS_RPC_SWAPFLAGS (RPC_TASK_SWAPPER|RPC_TASK_ROOTCREDS)#define NFS_RW_SYNC 0x0001 /* O_SYNC handling */#define NFS_RW_SWAP 0x0002 /* This is a swap request *//* * When flushing a cluster of dirty pages, there can be different * strategies: */#define FLUSH_AGING 0 /* only flush old buffers */#define FLUSH_SYNC 1 /* file being synced, or contention */#define FLUSH_WAIT 2 /* wait for completion */#define FLUSH_STABLE 4 /* commit to stable storage */#define FLUSH_LOWPRI 8 /* low priority background flush */#define FLUSH_HIGHPRI 16 /* high priority memory reclaim flush */#ifdef __KERNEL__/* * NFSv3/v4 Access mode cache entry */struct nfs_access_entry { unsigned long jiffies; struct rpc_cred * cred; int mask;};struct nfs4_state;struct nfs_open_context { atomic_t count; struct dentry *dentry; struct rpc_cred *cred; struct nfs4_state *state; fl_owner_t lockowner; int mode; int error; struct list_head list; wait_queue_head_t waitq;};/* * NFSv4 delegation */struct nfs_delegation;/* * nfs fs inode data in memory */struct nfs_inode { /* * The 64bit 'inode number' */ __u64 fileid; /* * NFS file handle */ struct nfs_fh fh; /* * Various flags */ unsigned int flags; /* * read_cache_jiffies is when we started read-caching this inode, * and read_cache_mtime is the mtime of the inode at that time. * attrtimeo is for how long the cached information is assumed * to be valid. A successful attribute revalidation doubles * attrtimeo (up to acregmax/acdirmax), a failure resets it to * acregmin/acdirmin. * * We need to revalidate the cached attrs for this inode if * * jiffies - read_cache_jiffies > attrtimeo * * and invalidate any cached data/flush out any dirty pages if * we find that * * mtime != read_cache_mtime */ unsigned long readdir_timestamp; unsigned long read_cache_jiffies; unsigned long attrtimeo; unsigned long attrtimeo_timestamp; __u64 change_attr; /* v4 only */ /* "Generation counter" for the attribute cache. This is * bumped whenever we update the metadata on the * server. */ unsigned long cache_change_attribute; /* * Counter indicating the number of outstanding requests that * will cause a file data update. */ atomic_t data_updates; struct nfs_access_entry cache_access; /* * This is the cookie verifier used for NFSv3 readdir * operations */ __u32 cookieverf[2]; /* * This is the list of dirty unwritten pages. */ spinlock_t req_lock; struct list_head dirty; struct list_head commit; struct radix_tree_root nfs_page_tree; unsigned int ndirty, ncommit, npages; /* Open contexts for shared mmap writes */ struct list_head open_files; wait_queue_head_t nfs_i_wait;#ifdef CONFIG_NFS_V4 /* NFSv4 state */ struct list_head open_states; struct nfs_delegation *delegation; int delegation_state; struct rw_semaphore rwsem;#endif /* CONFIG_NFS_V4*/ struct inode vfs_inode;};/* * Legal inode flag values */#define NFS_INO_STALE 0x0001 /* possible stale inode */#define NFS_INO_ADVISE_RDPLUS 0x0002 /* advise readdirplus */#define NFS_INO_REVALIDATING 0x0004 /* revalidating attrs */#define NFS_INO_INVALID_ATTR 0x0008 /* cached attrs are invalid */#define NFS_INO_INVALID_DATA 0x0010 /* cached data is invalid */#define NFS_INO_INVALID_ATIME 0x0020 /* cached atime is invalid */static inline struct nfs_inode *NFS_I(struct inode *inode){ return container_of(inode, struct nfs_inode, vfs_inode);}#define NFS_SB(s) ((struct nfs_server *)(s->s_fs_info))#define NFS_FH(inode) (&NFS_I(inode)->fh)#define NFS_SERVER(inode) (NFS_SB(inode->i_sb))#define NFS_CLIENT(inode) (NFS_SERVER(inode)->client)#define NFS_PROTO(inode) (NFS_SERVER(inode)->rpc_ops)#define NFS_ADDR(inode) (RPC_PEERADDR(NFS_CLIENT(inode)))#define NFS_COOKIEVERF(inode) (NFS_I(inode)->cookieverf)#define NFS_READTIME(inode) (NFS_I(inode)->read_cache_jiffies)#define NFS_CHANGE_ATTR(inode) (NFS_I(inode)->change_attr)#define NFS_ATTRTIMEO(inode) (NFS_I(inode)->attrtimeo)#define NFS_MINATTRTIMEO(inode) \ (S_ISDIR(inode->i_mode)? NFS_SERVER(inode)->acdirmin \ : NFS_SERVER(inode)->acregmin)#define NFS_MAXATTRTIMEO(inode) \ (S_ISDIR(inode->i_mode)? NFS_SERVER(inode)->acdirmax \ : NFS_SERVER(inode)->acregmax)#define NFS_ATTRTIMEO_UPDATE(inode) (NFS_I(inode)->attrtimeo_timestamp)#define NFS_FLAGS(inode) (NFS_I(inode)->flags)#define NFS_REVALIDATING(inode) (NFS_FLAGS(inode) & NFS_INO_REVALIDATING)#define NFS_STALE(inode) (NFS_FLAGS(inode) & NFS_INO_STALE)#define NFS_FILEID(inode) (NFS_I(inode)->fileid)static inline int nfs_caches_unstable(struct inode *inode){ return atomic_read(&NFS_I(inode)->data_updates) != 0;}static inline void NFS_CACHEINV(struct inode *inode){ if (!nfs_caches_unstable(inode)) NFS_FLAGS(inode) |= NFS_INO_INVALID_ATTR;}static inline int nfs_server_capable(struct inode *inode, int cap){ return NFS_SERVER(inode)->caps & cap;}static inline int NFS_USE_READDIRPLUS(struct inode *inode){ return NFS_FLAGS(inode) & NFS_INO_ADVISE_RDPLUS;}static inlineloff_t page_offset(struct page *page){ return ((loff_t)page->index) << PAGE_CACHE_SHIFT;}/** * nfs_save_change_attribute - Returns the inode attribute change cookie * @inode - pointer to inode * The "change attribute" is updated every time we finish an operation * that will result in a metadata change on the server. */static inline long nfs_save_change_attribute(struct inode *inode){ return NFS_I(inode)->cache_change_attribute;}/** * nfs_verify_change_attribute - Detects NFS inode cache updates * @inode - pointer to inode * @chattr - previously saved change attribute * Return "false" if metadata has been updated (or is in the process of * being updated) since the change attribute was saved. */static inline int nfs_verify_change_attribute(struct inode *inode, unsigned long chattr){ return !nfs_caches_unstable(inode) && chattr == NFS_I(inode)->cache_change_attribute;}/* * linux/fs/nfs/inode.c */extern void nfs_zap_caches(struct inode *);extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, struct nfs_fattr *);extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *);extern int nfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);extern int nfs_permission(struct inode *, int, struct nameidata *);extern int nfs_access_get_cached(struct inode *, struct rpc_cred *, struct nfs_access_entry *);extern void nfs_access_add_cache(struct inode *, struct nfs_access_entry *);extern int nfs_open(struct inode *, struct file *);extern int nfs_release(struct inode *, struct file *);extern int nfs_attribute_timeout(struct inode *inode);extern int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode);extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *);extern int nfs_setattr(struct dentry *, struct iattr *);extern void nfs_begin_attr_update(struct inode *);extern void nfs_end_attr_update(struct inode *);extern void nfs_begin_data_update(struct inode *);extern void nfs_end_data_update(struct inode *);extern void nfs_end_data_update_defer(struct inode *);extern struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, struct rpc_cred *cred);extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx);extern void put_nfs_open_context(struct nfs_open_context *ctx);extern void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx);extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, int mode);extern void nfs_file_clear_open_context(struct file *filp);/* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */extern u32 root_nfs_parse_addr(char *name); /*__init*//* * linux/fs/nfs/file.c */extern struct inode_operations nfs_file_inode_operations;extern struct file_operations nfs_file_operations;extern struct address_space_operations nfs_file_aops;static inline struct rpc_cred *nfs_file_cred(struct file *file){ if (file != NULL) { struct nfs_open_context *ctx; ctx = (struct nfs_open_context*)file->private_data; return ctx->cred; } return NULL;}/* * linux/fs/nfs/direct.c */extern ssize_t nfs_direct_IO(int, struct kiocb *, const struct iovec *, loff_t, unsigned long);extern ssize_t nfs_file_direct_read(struct kiocb *iocb, char __user *buf, size_t count, loff_t pos);extern ssize_t nfs_file_direct_write(struct kiocb *iocb, const char __user *buf, size_t count, loff_t pos);/* * linux/fs/nfs/dir.c */extern struct inode_operations nfs_dir_inode_operations;extern struct file_operations nfs_dir_operations;extern struct dentry_operations nfs_dentry_operations;/* * linux/fs/nfs/symlink.c */extern struct inode_operations nfs_symlink_inode_operations;/* * linux/fs/nfs/locks.c */extern int nfs_lock(struct file *, int, struct file_lock *);/* * linux/fs/nfs/unlink.c */extern int nfs_async_unlink(struct dentry *);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?