| 
									
										
										
										
											2009-09-23 13:00:27 -05:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * V9FS cache definitions. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Copyright (C) 2009 by Abhishek Kulkarni <adkulkar@umail.iu.edu> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  *  it under the terms of the GNU General Public License version 2 | 
					
						
							|  |  |  |  *  as published by the Free Software Foundation. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  *  GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  *  along with this program; if not, write to: | 
					
						
							|  |  |  |  *  Free Software Foundation | 
					
						
							|  |  |  |  *  51 Franklin Street, Fifth Floor | 
					
						
							|  |  |  |  *  Boston, MA  02111-1301  USA | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _9P_CACHE_H
 | 
					
						
							|  |  |  | #ifdef CONFIG_9P_FSCACHE
 | 
					
						
							|  |  |  | #include <linux/fscache.h>
 | 
					
						
							|  |  |  | #include <linux/spinlock.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern struct fscache_netfs v9fs_cache_netfs; | 
					
						
							|  |  |  | extern const struct fscache_cookie_def v9fs_cache_session_index_def; | 
					
						
							|  |  |  | extern const struct fscache_cookie_def v9fs_cache_inode_index_def; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void v9fs_cache_session_get_cookie(struct v9fs_session_info *v9ses); | 
					
						
							|  |  |  | extern void v9fs_cache_session_put_cookie(struct v9fs_session_info *v9ses); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern void v9fs_cache_inode_get_cookie(struct inode *inode); | 
					
						
							|  |  |  | extern void v9fs_cache_inode_put_cookie(struct inode *inode); | 
					
						
							|  |  |  | extern void v9fs_cache_inode_flush_cookie(struct inode *inode); | 
					
						
							|  |  |  | extern void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *filp); | 
					
						
							|  |  |  | extern void v9fs_cache_inode_reset_cookie(struct inode *inode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int __v9fs_cache_register(void); | 
					
						
							|  |  |  | extern void __v9fs_cache_unregister(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int __v9fs_fscache_release_page(struct page *page, gfp_t gfp); | 
					
						
							|  |  |  | extern void __v9fs_fscache_invalidate_page(struct page *page); | 
					
						
							|  |  |  | extern int __v9fs_readpage_from_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					struct page *page); | 
					
						
							|  |  |  | extern int __v9fs_readpages_from_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					 struct address_space *mapping, | 
					
						
							|  |  |  | 					 struct list_head *pages, | 
					
						
							|  |  |  | 					 unsigned *nr_pages); | 
					
						
							|  |  |  | extern void __v9fs_readpage_to_fscache(struct inode *inode, struct page *page); | 
					
						
							| 
									
										
										
										
											2011-02-28 17:03:56 +05:30
										 |  |  | extern void __v9fs_fscache_wait_on_page_write(struct inode *inode, | 
					
						
							|  |  |  | 					      struct page *page); | 
					
						
							| 
									
										
										
										
											2009-09-23 13:00:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline int v9fs_fscache_release_page(struct page *page, | 
					
						
							|  |  |  | 					    gfp_t gfp) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __v9fs_fscache_release_page(page, gfp); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_fscache_invalidate_page(struct page *page) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	__v9fs_fscache_invalidate_page(page); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int v9fs_readpage_from_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					     struct page *page) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __v9fs_readpage_from_fscache(inode, page); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int v9fs_readpages_from_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					      struct address_space *mapping, | 
					
						
							|  |  |  | 					      struct list_head *pages, | 
					
						
							|  |  |  | 					      unsigned *nr_pages) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __v9fs_readpages_from_fscache(inode, mapping, pages, | 
					
						
							|  |  |  | 					     nr_pages); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_readpage_to_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					    struct page *page) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (PageFsCache(page)) | 
					
						
							|  |  |  | 		__v9fs_readpage_to_fscache(inode, page); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_uncache_page(struct inode *inode, struct page *page) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-02-28 17:04:02 +05:30
										 |  |  | 	struct v9fs_inode *v9inode = V9FS_I(inode); | 
					
						
							|  |  |  | 	fscache_uncache_page(v9inode->fscache, page); | 
					
						
							| 
									
										
										
										
											2009-09-23 13:00:27 -05:00
										 |  |  | 	BUG_ON(PageFsCache(page)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-28 17:03:56 +05:30
										 |  |  | static inline void v9fs_fscache_wait_on_page_write(struct inode *inode, | 
					
						
							|  |  |  | 						   struct page *page) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return __v9fs_fscache_wait_on_page_write(inode, page); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:00:27 -05:00
										 |  |  | #else /* CONFIG_9P_FSCACHE */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 08:07:11 -04:00
										 |  |  | static inline void v9fs_cache_inode_get_cookie(struct inode *inode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_cache_inode_put_cookie(struct inode *inode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *file) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:00:27 -05:00
										 |  |  | static inline int v9fs_fscache_release_page(struct page *page, | 
					
						
							|  |  |  | 					    gfp_t gfp) { | 
					
						
							|  |  |  | 	return 1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_fscache_invalidate_page(struct page *page) {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int v9fs_readpage_from_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					     struct page *page) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return -ENOBUFS; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline int v9fs_readpages_from_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					      struct address_space *mapping, | 
					
						
							|  |  |  | 					      struct list_head *pages, | 
					
						
							|  |  |  | 					      unsigned *nr_pages) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return -ENOBUFS; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_readpage_to_fscache(struct inode *inode, | 
					
						
							|  |  |  | 					    struct page *page) | 
					
						
							|  |  |  | {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void v9fs_uncache_page(struct inode *inode, struct page *page) | 
					
						
							|  |  |  | {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-28 17:03:56 +05:30
										 |  |  | static inline void v9fs_fscache_wait_on_page_write(struct inode *inode, | 
					
						
							|  |  |  | 						   struct page *page) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-23 13:00:27 -05:00
										 |  |  | #endif /* CONFIG_9P_FSCACHE */
 | 
					
						
							|  |  |  | #endif /* _9P_CACHE_H */
 |