nfs_fs.h

来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 730 行 · 第 1/2 页

H
730
字号
extern void nfs_complete_unlink(struct dentry *);/* * linux/fs/nfs/write.c */extern int  nfs_writepage(struct page *page, struct writeback_control *wbc);extern int  nfs_writepages(struct address_space *, struct writeback_control *);extern int  nfs_flush_incompatible(struct file *file, struct page *page);extern int  nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int);extern void nfs_writeback_done(struct rpc_task *task);#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)extern void nfs_commit_done(struct rpc_task *);#endif/* * Try to write back everything synchronously (but check the * return value!) */extern int  nfs_sync_inode(struct inode *, unsigned long, unsigned int, int);extern int  nfs_flush_inode(struct inode *, unsigned long, unsigned int, int);extern int  nfs_flush_list(struct list_head *, int, int);#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)extern int  nfs_commit_inode(struct inode *, unsigned long, unsigned int, int);extern int  nfs_commit_list(struct list_head *, int);#elsestatic inline intnfs_commit_inode(struct inode *inode, unsigned long idx_start, unsigned int npages, int how){	return 0;}#endifstatic inline intnfs_have_writebacks(struct inode *inode){	return NFS_I(inode)->npages != 0;}static inline intnfs_wb_all(struct inode *inode){	int error = nfs_sync_inode(inode, 0, 0, FLUSH_WAIT);	return (error < 0) ? error : 0;}/* * Write back all requests on one page - we do this before reading it. */static inline int nfs_wb_page_priority(struct inode *inode, struct page* page, int how){	int error = nfs_sync_inode(inode, page->index, 1,			how | FLUSH_WAIT | FLUSH_STABLE);	return (error < 0) ? error : 0;}static inline int nfs_wb_page(struct inode *inode, struct page* page){	return nfs_wb_page_priority(inode, page, 0);}/* Hack for future NFS swap support */#ifndef IS_SWAPFILE# define IS_SWAPFILE(inode)	(0)#endif/* * linux/fs/nfs/read.c */extern int  nfs_readpage(struct file *, struct page *);extern int  nfs_readpages(struct file *, struct address_space *,		struct list_head *, unsigned);extern int  nfs_pagein_list(struct list_head *, int);extern void nfs_readpage_result(struct rpc_task *);/* * linux/fs/mount_clnt.c * (Used only by nfsroot module) */extern int  nfsroot_mount(struct sockaddr_in *, char *, struct nfs_fh *,		int, int);/* * inline functions */static inline loff_tnfs_size_to_loff_t(__u64 size){	loff_t maxsz = (((loff_t) ULONG_MAX) << PAGE_CACHE_SHIFT) + PAGE_CACHE_SIZE - 1;	if (size > maxsz)		return maxsz;	return (loff_t) size;}static inline ino_tnfs_fileid_to_ino_t(u64 fileid){	ino_t ino = (ino_t) fileid;	if (sizeof(ino_t) < sizeof(u64))		ino ^= fileid >> (sizeof(u64)-sizeof(ino_t)) * 8;	return ino;}/* NFS root */extern void * nfs_root_data(void);#define nfs_wait_event(clnt, wq, condition)				\({									\	int __retval = 0;						\	if (clnt->cl_intr) {						\		sigset_t oldmask;					\		rpc_clnt_sigmask(clnt, &oldmask);			\		__retval = wait_event_interruptible(wq, condition);	\		rpc_clnt_sigunmask(clnt, &oldmask);			\	} else								\		wait_event(wq, condition);				\	__retval;							\})#define NFS_JUKEBOX_RETRY_TIME (5 * HZ)#ifdef CONFIG_NFS_V4struct idmap;/* * In a seqid-mutating op, this macro controls which error return * values trigger incrementation of the seqid. * * from rfc 3010: * The client MUST monotonically increment the sequence number for the * CLOSE, LOCK, LOCKU, OPEN, OPEN_CONFIRM, and OPEN_DOWNGRADE * operations.  This is true even in the event that the previous * operation that used the sequence number received an error.  The only * exception to this rule is if the previous operation received one of * the following errors: NFSERR_STALE_CLIENTID, NFSERR_STALE_STATEID, * NFSERR_BAD_STATEID, NFSERR_BAD_SEQID, NFSERR_BADXDR, * NFSERR_RESOURCE, NFSERR_NOFILEHANDLE. * */#define seqid_mutating_err(err)       \(((err) != NFSERR_STALE_CLIENTID) &&  \ ((err) != NFSERR_STALE_STATEID)  &&  \ ((err) != NFSERR_BAD_STATEID)    &&  \ ((err) != NFSERR_BAD_SEQID)      &&  \ ((err) != NFSERR_BAD_XDR)        &&  \ ((err) != NFSERR_RESOURCE)       &&  \ ((err) != NFSERR_NOFILEHANDLE))enum nfs4_client_state {	NFS4CLNT_OK  = 0,};/* * The nfs4_client identifies our client state to the server. */struct nfs4_client {	struct list_head	cl_servers;	/* Global list of servers */	struct in_addr		cl_addr;	/* Server identifier */	u64			cl_clientid;	/* constant */	nfs4_verifier		cl_confirm;	unsigned long		cl_state;	u32			cl_lockowner_id;	/*	 * The following rwsem ensures exclusive access to the server	 * while we recover the state following a lease expiration.	 */	struct rw_semaphore	cl_sem;	struct list_head	cl_delegations;	struct list_head	cl_state_owners;	struct list_head	cl_unused;	int			cl_nunused;	spinlock_t		cl_lock;	atomic_t		cl_count;	struct rpc_clnt *	cl_rpcclient;	struct rpc_cred *	cl_cred;	struct list_head	cl_superblocks;	/* List of nfs_server structs */	unsigned long		cl_lease_time;	unsigned long		cl_last_renewal;	struct work_struct	cl_renewd;	struct work_struct	cl_recoverd;	wait_queue_head_t	cl_waitq;	struct rpc_wait_queue	cl_rpcwaitq;	/* idmapper */	struct idmap *		cl_idmap;	/* Our own IP address, as a null-terminated string.	 * This is used to generate the clientid, and the callback address.	 */	char			cl_ipaddr[16];};/* * NFS4 state_owners and lock_owners are simply labels for ordered * sequences of RPC calls. Their sole purpose is to provide once-only * semantics by allowing the server to identify replayed requests. * * The ->so_sema is held during all state_owner seqid-mutating operations: * OPEN, OPEN_DOWNGRADE, and CLOSE. Its purpose is to properly serialize * so_seqid. */struct nfs4_state_owner {	struct list_head     so_list;	 /* per-clientid list of state_owners */	struct nfs4_client   *so_client;	u32                  so_id;      /* 32-bit identifier, unique */	struct semaphore     so_sema;	u32                  so_seqid;   /* protected by so_sema */	atomic_t	     so_count;	struct rpc_cred	     *so_cred;	 /* Associated cred */	struct list_head     so_states;	struct list_head     so_delegations;};/* * struct nfs4_state maintains the client-side state for a given * (state_owner,inode) tuple (OPEN) or state_owner (LOCK). * * OPEN: * In order to know when to OPEN_DOWNGRADE or CLOSE the state on the server, * we need to know how many files are open for reading or writing on a * given inode. This information too is stored here. * * LOCK: one nfs4_state (LOCK) to hold the lock stateid nfs4_state(OPEN) */struct nfs4_lock_state {	struct list_head	ls_locks;	/* Other lock stateids */	fl_owner_t		ls_owner;	/* POSIX lock owner */#define NFS_LOCK_INITIALIZED 1	int			ls_flags;	u32			ls_seqid;	u32			ls_id;	nfs4_stateid		ls_stateid;	atomic_t		ls_count;};/* bits for nfs4_state->flags */enum {	LK_STATE_IN_USE,	NFS_DELEGATED_STATE,};struct nfs4_state {	struct list_head open_states;	/* List of states for the same state_owner */	struct list_head inode_states;	/* List of states for the same inode */	struct list_head lock_states;	/* List of subservient lock stateids */	struct nfs4_state_owner *owner;	/* Pointer to the open owner */	struct inode *inode;		/* Pointer to the inode */	unsigned long flags;		/* Do we hold any locks? */	struct semaphore lock_sema;	/* Serializes file locking operations */	rwlock_t state_lock;		/* Protects the lock_states list */	nfs4_stateid stateid;	unsigned int nreaders;	unsigned int nwriters;	int state;			/* State on the server (R,W, or RW) */	atomic_t count;};struct nfs4_exception {	long timeout;	int retry;};extern struct dentry_operations nfs4_dentry_operations;extern struct inode_operations nfs4_dir_inode_operations;/* nfs4proc.c */extern int nfs4_proc_setclientid(struct nfs4_client *, u32, unsigned short);extern int nfs4_proc_setclientid_confirm(struct nfs4_client *);extern int nfs4_open_reclaim(struct nfs4_state_owner *, struct nfs4_state *);extern int nfs4_proc_async_renew(struct nfs4_client *);extern int nfs4_proc_renew(struct nfs4_client *);extern int nfs4_do_close(struct inode *, struct nfs4_state *);extern int nfs4_do_downgrade(struct inode *inode, struct nfs4_state *state, mode_t mode);extern int nfs4_wait_clnt_recover(struct rpc_clnt *, struct nfs4_client *);extern struct inode *nfs4_atomic_open(struct inode *, struct dentry *, struct nameidata *);extern int nfs4_open_revalidate(struct inode *, struct dentry *, int);extern int nfs4_handle_exception(struct nfs_server *, int, struct nfs4_exception *);extern int nfs4_lock_reclaim(struct nfs4_state *state, struct file_lock *request);/* nfs4renewd.c */extern void nfs4_schedule_state_renewal(struct nfs4_client *);extern void nfs4_renewd_prepare_shutdown(struct nfs_server *);extern void nfs4_kill_renewd(struct nfs4_client *);/* nfs4state.c */extern void init_nfsv4_state(struct nfs_server *);extern void destroy_nfsv4_state(struct nfs_server *);extern struct nfs4_client *nfs4_get_client(struct in_addr *);extern void nfs4_put_client(struct nfs4_client *clp);extern int nfs4_init_client(struct nfs4_client *clp);extern struct nfs4_client *nfs4_find_client(struct in_addr *);extern u32 nfs4_alloc_lockowner_id(struct nfs4_client *);extern struct nfs4_state_owner * nfs4_get_state_owner(struct nfs_server *, struct rpc_cred *);extern void nfs4_put_state_owner(struct nfs4_state_owner *);extern struct nfs4_state * nfs4_get_open_state(struct inode *, struct nfs4_state_owner *);extern void nfs4_put_open_state(struct nfs4_state *);extern void nfs4_close_state(struct nfs4_state *, mode_t);extern struct nfs4_state *nfs4_find_state(struct inode *, struct rpc_cred *, mode_t mode);extern void nfs4_increment_seqid(int status, struct nfs4_state_owner *sp);extern void nfs4_schedule_state_recovery(struct nfs4_client *);extern struct nfs4_lock_state *nfs4_find_lock_state(struct nfs4_state *state, fl_owner_t);extern struct nfs4_lock_state *nfs4_get_lock_state(struct nfs4_state *state, fl_owner_t);extern void nfs4_put_lock_state(struct nfs4_lock_state *state);extern void nfs4_increment_lock_seqid(int status, struct nfs4_lock_state *ls);extern void nfs4_notify_setlk(struct nfs4_state *, struct file_lock *, struct nfs4_lock_state *);extern void nfs4_notify_unlck(struct nfs4_state *, struct file_lock *, struct nfs4_lock_state *);extern void nfs4_copy_stateid(nfs4_stateid *, struct nfs4_state *, fl_owner_t);struct nfs4_mount_data;#else#define init_nfsv4_state(server)  do { } while (0)#define destroy_nfsv4_state(server)       do { } while (0)#define nfs4_put_state_owner(inode, owner) do { } while (0)#define nfs4_put_open_state(state) do { } while (0)#define nfs4_close_state(a, b) do { } while (0)#define nfs4_renewd_prepare_shutdown(server) do { } while (0)#endif#endif /* __KERNEL__ *//* * NFS debug flags */#define NFSDBG_VFS		0x0001#define NFSDBG_DIRCACHE		0x0002#define NFSDBG_LOOKUPCACHE	0x0004#define NFSDBG_PAGECACHE	0x0008#define NFSDBG_PROC		0x0010#define NFSDBG_XDR		0x0020#define NFSDBG_FILE		0x0040#define NFSDBG_ROOT		0x0080#define NFSDBG_CALLBACK		0x0100#define NFSDBG_ALL		0xFFFF#ifdef __KERNEL__# undef ifdebug# ifdef NFS_DEBUG#  define ifdebug(fac)		if (unlikely(nfs_debug & NFSDBG_##fac))# else#  define ifdebug(fac)		if (0)# endif#endif /* __KERNEL */#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?