⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nfs_page.h

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 H
字号:
/* * linux/include/linux/nfs_page.h * * Copyright (C) 2000 Trond Myklebust * * NFS page cache wrapper. */#ifndef _LINUX_NFS_PAGE_H#define _LINUX_NFS_PAGE_H#include <linux/list.h>#include <linux/mm.h>#include <linux/wait.h>#include <linux/sunrpc/auth.h>#include <linux/nfs_xdr.h>/* * Valid flags for a dirty buffer */#define PG_BUSY			0struct nfs_page {	struct list_head	wb_hash,	/* Inode */				wb_list,	/* Defines state of page: */				*wb_list_head;	/*      read/write/commit */	struct file		*wb_file;	struct inode		*wb_inode;	struct rpc_cred		*wb_cred;	struct page		*wb_page;	/* page to read in/write out */	wait_queue_head_t	wb_wait;	/* wait queue */	unsigned long		wb_timeout;	/* when to read/write/commit */	unsigned int		wb_offset,	/* Offset of read/write */				wb_bytes,	/* Length of request */				wb_count;	/* reference count */	unsigned long		wb_flags;	struct nfs_writeverf	wb_verf;	/* Commit cookie */};#define NFS_WBACK_BUSY(req)	(test_bit(PG_BUSY,&(req)->wb_flags))extern	struct nfs_page *nfs_create_request(struct file *file,					    struct inode *inode,					    struct page *page,					    unsigned int offset,					    unsigned int count);extern	void nfs_release_request(struct nfs_page *req);extern	void nfs_list_add_request(struct nfs_page *req,				  struct list_head *head);extern	void nfs_list_remove_request(struct nfs_page *req);extern	int nfs_scan_list_timeout(struct list_head *head,				  struct list_head *dst,				  struct inode *inode);extern	int nfs_scan_list(struct list_head *src, struct list_head *dst,			  struct file *file, unsigned long idx_start,			  unsigned int npages);extern	int nfs_coalesce_requests(struct list_head *src, struct list_head *dst,				  unsigned int maxpages);extern	spinlock_t nfs_wreq_lock;/* * Lock the page of an asynchronous request */static __inline__ intnfs_lock_request(struct nfs_page *req){	if (test_and_set_bit(PG_BUSY, &req->wb_flags))		return 0;	req->wb_count++;	return 1;}static __inline__ voidnfs_unlock_request(struct nfs_page *req){	if (!NFS_WBACK_BUSY(req)) {		printk(KERN_ERR "NFS: Invalid unlock attempted\n");		BUG();	}	smp_mb__before_clear_bit();	clear_bit(PG_BUSY, &req->wb_flags);	smp_mb__after_clear_bit();	if (waitqueue_active(&req->wb_wait))		wake_up(&req->wb_wait);	nfs_release_request(req);}static __inline__ struct nfs_page *nfs_list_entry(struct list_head *head){	return list_entry(head, struct nfs_page, wb_list);}static __inline__ struct nfs_page *nfs_inode_wb_entry(struct list_head *head){	return list_entry(head, struct nfs_page, wb_hash);}#endif /* _LINUX_NFS_PAGE_H */

⌨️ 快捷键说明

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