1/* 2 * fs/cifs/fscache.h - CIFS filesystem cache interface definitions 3 * 4 * Copyright (c) 2010 Novell, Inc. 5 * Authors(s): Suresh Jayaraman (sjayaraman@suse.de> 6 * 7 * This library is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU Lesser General Public License as published 9 * by the Free Software Foundation; either version 2.1 of the License, or 10 * (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 15 * the GNU Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public License 18 * along with this library; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21#ifndef _CIFS_FSCACHE_H 22#define _CIFS_FSCACHE_H 23 24#include <linux/fscache.h> 25 26#include "cifsglob.h" 27 28#ifdef CONFIG_CIFS_FSCACHE 29 30extern struct fscache_netfs cifs_fscache_netfs; 31extern const struct fscache_cookie_def cifs_fscache_server_index_def; 32extern const struct fscache_cookie_def cifs_fscache_super_index_def; 33extern const struct fscache_cookie_def cifs_fscache_inode_object_def; 34 35extern int cifs_fscache_register(void); 36extern void cifs_fscache_unregister(void); 37 38/* 39 * fscache.c 40 */ 41extern void cifs_fscache_get_client_cookie(struct TCP_Server_Info *); 42extern void cifs_fscache_release_client_cookie(struct TCP_Server_Info *); 43extern void cifs_fscache_get_super_cookie(struct cifs_tcon *); 44extern void cifs_fscache_release_super_cookie(struct cifs_tcon *); 45 46extern void cifs_fscache_release_inode_cookie(struct inode *); 47extern void cifs_fscache_set_inode_cookie(struct inode *, struct file *); 48extern void cifs_fscache_reset_inode_cookie(struct inode *); 49 50extern void __cifs_fscache_invalidate_page(struct page *, struct inode *); 51extern int cifs_fscache_release_page(struct page *page, gfp_t gfp); 52extern int __cifs_readpage_from_fscache(struct inode *, struct page *); 53extern int __cifs_readpages_from_fscache(struct inode *, 54 struct address_space *, 55 struct list_head *, 56 unsigned *); 57extern void __cifs_fscache_readpages_cancel(struct inode *, struct list_head *); 58 59extern void __cifs_readpage_to_fscache(struct inode *, struct page *); 60 61static inline void cifs_fscache_invalidate_page(struct page *page, 62 struct inode *inode) 63{ 64 if (PageFsCache(page)) 65 __cifs_fscache_invalidate_page(page, inode); 66} 67 68static inline int cifs_readpage_from_fscache(struct inode *inode, 69 struct page *page) 70{ 71 if (CIFS_I(inode)->fscache) 72 return __cifs_readpage_from_fscache(inode, page); 73 74 return -ENOBUFS; 75} 76 77static inline int cifs_readpages_from_fscache(struct inode *inode, 78 struct address_space *mapping, 79 struct list_head *pages, 80 unsigned *nr_pages) 81{ 82 if (CIFS_I(inode)->fscache) 83 return __cifs_readpages_from_fscache(inode, mapping, pages, 84 nr_pages); 85 return -ENOBUFS; 86} 87 88static inline void cifs_readpage_to_fscache(struct inode *inode, 89 struct page *page) 90{ 91 if (PageFsCache(page)) 92 __cifs_readpage_to_fscache(inode, page); 93} 94 95static inline void cifs_fscache_readpages_cancel(struct inode *inode, 96 struct list_head *pages) 97{ 98 if (CIFS_I(inode)->fscache) 99 return __cifs_fscache_readpages_cancel(inode, pages); 100} 101 102#else /* CONFIG_CIFS_FSCACHE */ 103static inline int cifs_fscache_register(void) { return 0; } 104static inline void cifs_fscache_unregister(void) {} 105 106static inline void 107cifs_fscache_get_client_cookie(struct TCP_Server_Info *server) {} 108static inline void 109cifs_fscache_release_client_cookie(struct TCP_Server_Info *server) {} 110static inline void cifs_fscache_get_super_cookie(struct cifs_tcon *tcon) {} 111static inline void 112cifs_fscache_release_super_cookie(struct cifs_tcon *tcon) {} 113 114static inline void cifs_fscache_release_inode_cookie(struct inode *inode) {} 115static inline void cifs_fscache_set_inode_cookie(struct inode *inode, 116 struct file *filp) {} 117static inline void cifs_fscache_reset_inode_cookie(struct inode *inode) {} 118static inline int cifs_fscache_release_page(struct page *page, gfp_t gfp) 119{ 120 return 1; /* May release page */ 121} 122 123static inline void cifs_fscache_invalidate_page(struct page *page, 124 struct inode *inode) {} 125static inline int 126cifs_readpage_from_fscache(struct inode *inode, struct page *page) 127{ 128 return -ENOBUFS; 129} 130 131static inline int cifs_readpages_from_fscache(struct inode *inode, 132 struct address_space *mapping, 133 struct list_head *pages, 134 unsigned *nr_pages) 135{ 136 return -ENOBUFS; 137} 138 139static inline void cifs_readpage_to_fscache(struct inode *inode, 140 struct page *page) {} 141 142static inline void cifs_fscache_readpages_cancel(struct inode *inode, 143 struct list_head *pages) 144{ 145} 146 147#endif /* CONFIG_CIFS_FSCACHE */ 148 149#endif /* _CIFS_FSCACHE_H */ 150