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 + -
显示快捷键?