Blame view

include/linux/nfs_page.h 3.58 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  /*
   * 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/pagemap.h>
  #include <linux/wait.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
  #include <linux/sunrpc/auth.h>
  #include <linux/nfs_xdr.h>
c03b40246   Trond Myklebust   NFS: Convert stru...
18
  #include <linux/kref.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
20
  
  /*
c6a556b88   Trond Myklebust   [PATCH] NFS: Make...
21
22
   * Valid flags for the radix tree
   */
9fd367f0f   Trond Myklebust   NFS cleanup: Rena...
23
  #define NFS_PAGE_TAG_LOCKED	0
5c3696834   Trond Myklebust   NFS cleanup: spee...
24
  #define NFS_PAGE_TAG_COMMIT	1
c6a556b88   Trond Myklebust   [PATCH] NFS: Make...
25
26
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27
28
   * Valid flags for a dirty buffer
   */
e468bae97   Trond Myklebust   NFS: Allow redirt...
29
30
31
32
33
34
  enum {
  	PG_BUSY = 0,
  	PG_CLEAN,
  	PG_NEED_COMMIT,
  	PG_NEED_RESCHED,
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35

3da28eb1c   Trond Myklebust   [PATCH] NFS: Repl...
36
  struct nfs_inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
37
  struct nfs_page {
2aefa1043   Trond Myklebust   NFS: Remove the r...
38
  	struct list_head	wb_list;	/* Defines state of page: */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39
40
  	struct page		*wb_page;	/* page to read in/write out */
  	struct nfs_open_context	*wb_context;	/* File state context info */
f11ac8db5   Trond Myklebust   NFSv4: Ensure tha...
41
  	struct nfs_lock_context	*wb_lock_context;	/* lock context info */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42
  	atomic_t		wb_complete;	/* i/os we're waiting for */
ca52fec15   Trond Myklebust   NFS: Use pgoff_t ...
43
  	pgoff_t			wb_index;	/* Offset >> PAGE_CACHE_SHIFT */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
45
46
  	unsigned int		wb_offset,	/* Offset & ~PAGE_CACHE_MASK */
  				wb_pgbase,	/* Start of page data */
  				wb_bytes;	/* Length of request */
c03b40246   Trond Myklebust   NFS: Convert stru...
47
  	struct kref		wb_kref;	/* reference count */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
48
49
50
  	unsigned long		wb_flags;
  	struct nfs_writeverf	wb_verf;	/* Commit cookie */
  };
d8a5ad75c   Trond Myklebust   NFS: Cleanup the ...
51
52
  struct nfs_pageio_descriptor {
  	struct list_head	pg_list;
bcb71bba7   Trond Myklebust   NFS: Another clea...
53
  	unsigned long		pg_bytes_written;
d8a5ad75c   Trond Myklebust   NFS: Cleanup the ...
54
55
56
  	size_t			pg_count;
  	size_t			pg_bsize;
  	unsigned int		pg_base;
bcb71bba7   Trond Myklebust   NFS: Another clea...
57
58
  
  	struct inode		*pg_inode;
8d5658c94   Trond Myklebust   NFS: Fix a buffer...
59
  	int			(*pg_doio)(struct inode *, struct list_head *, unsigned int, size_t, int);
bcb71bba7   Trond Myklebust   NFS: Another clea...
60
61
  	int 			pg_ioflags;
  	int			pg_error;
d8a5ad75c   Trond Myklebust   NFS: Cleanup the ...
62
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
  #define NFS_WBACK_BUSY(req)	(test_bit(PG_BUSY,&(req)->wb_flags))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
66
67
68
69
70
71
  
  extern	struct nfs_page *nfs_create_request(struct nfs_open_context *ctx,
  					    struct inode *inode,
  					    struct page *page,
  					    unsigned int offset,
  					    unsigned int count);
  extern	void nfs_clear_request(struct nfs_page *req);
  extern	void nfs_release_request(struct nfs_page *req);
5c3696834   Trond Myklebust   NFS cleanup: spee...
72
73
  extern	int nfs_scan_list(struct nfs_inode *nfsi, struct list_head *dst,
  			  pgoff_t idx_start, unsigned int npages, int tag);
bcb71bba7   Trond Myklebust   NFS: Another clea...
74
75
  extern	void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
  			     struct inode *inode,
8d5658c94   Trond Myklebust   NFS: Fix a buffer...
76
  			     int (*doio)(struct inode *, struct list_head *, unsigned int, size_t, int),
bcb71bba7   Trond Myklebust   NFS: Another clea...
77
78
  			     size_t bsize,
  			     int how);
8b09bee30   Trond Myklebust   NFS: Cleanup for ...
79
80
  extern	int nfs_pageio_add_request(struct nfs_pageio_descriptor *,
  				   struct nfs_page *);
bcb71bba7   Trond Myklebust   NFS: Another clea...
81
  extern	void nfs_pageio_complete(struct nfs_pageio_descriptor *desc);
7fe7f8487   Trond Myklebust   NFS: Avoid a dead...
82
  extern	void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *, pgoff_t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83
84
  extern  int nfs_wait_on_request(struct nfs_page *);
  extern	void nfs_unlock_request(struct nfs_page *req);
acee478af   Trond Myklebust   NFS: Clean up the...
85
  extern	int nfs_set_page_tag_locked(struct nfs_page *req);
9fd367f0f   Trond Myklebust   NFS cleanup: Rena...
86
  extern  void nfs_clear_page_tag_locked(struct nfs_page *req);
c6a556b88   Trond Myklebust   [PATCH] NFS: Make...
87

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
89
  
  /*
c03b40246   Trond Myklebust   NFS: Convert stru...
90
   * Lock the page of an asynchronous request without getting a new reference
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
91
92
93
94
   */
  static inline int
  nfs_lock_request_dontget(struct nfs_page *req)
  {
a911fd9a6   Chuck Lever   NFS: simplify inl...
95
  	return !test_and_set_bit(PG_BUSY, &req->wb_flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96
  }
3da28eb1c   Trond Myklebust   [PATCH] NFS: Repl...
97
98
99
100
101
102
103
104
105
  /**
   * nfs_list_add_request - Insert a request into a list
   * @req: request
   * @head: head of list into which to insert the request.
   */
  static inline void
  nfs_list_add_request(struct nfs_page *req, struct list_head *head)
  {
  	list_add_tail(&req->wb_list, head);
3da28eb1c   Trond Myklebust   [PATCH] NFS: Repl...
106
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
107
108
109
110
111
112
113
114
115
116
  
  /**
   * nfs_list_remove_request - Remove a request from its wb_list
   * @req: request
   */
  static inline void
  nfs_list_remove_request(struct nfs_page *req)
  {
  	if (list_empty(&req->wb_list))
  		return;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
117
  	list_del_init(&req->wb_list);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
121
122
123
124
125
126
127
128
129
130
131
  static inline struct nfs_page *
  nfs_list_entry(struct list_head *head)
  {
  	return list_entry(head, struct nfs_page, wb_list);
  }
  
  static inline
  loff_t req_offset(struct nfs_page *req)
  {
  	return (((loff_t)req->wb_index) << PAGE_CACHE_SHIFT) + req->wb_offset;
  }
  
  #endif /* _LINUX_NFS_PAGE_H */