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 cifsTconInfo *); 44extern void cifs_fscache_release_super_cookie(struct cifsTconInfo *); 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 *); 57 58extern void __cifs_readpage_to_fscache(struct inode *, struct page *); 59 60static inline void cifs_fscache_invalidate_page(struct page *page, 61 struct inode *inode) 62{ 63 if (PageFsCache(page)) 64 __cifs_fscache_invalidate_page(page, inode); 65} 66 67static inline int cifs_readpage_from_fscache(struct inode *inode, 68 struct page *page) 69{ 70 if (CIFS_I(inode)->fscache) 71 return __cifs_readpage_from_fscache(inode, page); 72 73 return -ENOBUFS; 74} 75 76static inline int cifs_readpages_from_fscache(struct inode *inode, 77 struct address_space *mapping, 78 struct list_head *pages, 79 unsigned *nr_pages) 80{ 81 if (CIFS_I(inode)->fscache) 82 return __cifs_readpages_from_fscache(inode, mapping, pages, 83 nr_pages); 84 return -ENOBUFS; 85} 86 87static inline void cifs_readpage_to_fscache(struct inode *inode, 88 struct page *page) 89{ 90 if (PageFsCache(page)) 91 __cifs_readpage_to_fscache(inode, page); 92} 93 94#else /* CONFIG_CIFS_FSCACHE */ 95static inline int cifs_fscache_register(void) { return 0; } 96static inline void cifs_fscache_unregister(void) {} 97 98static inline void 99cifs_fscache_get_client_cookie(struct TCP_Server_Info *server) {} 100static inline void 101cifs_fscache_release_client_cookie(struct TCP_Server_Info *server) {} 102static inline void cifs_fscache_get_super_cookie(struct cifsTconInfo *tcon) {} 103static inline void 104cifs_fscache_release_super_cookie(struct cifsTconInfo *tcon) {} 105 106static inline void cifs_fscache_release_inode_cookie(struct inode *inode) {} 107static inline void cifs_fscache_set_inode_cookie(struct inode *inode, 108 struct file *filp) {} 109static inline void cifs_fscache_reset_inode_cookie(struct inode *inode) {} 110static inline int cifs_fscache_release_page(struct page *page, gfp_t gfp) 111{ 112 return 1; /* May release page */ 113} 114 115static inline void cifs_fscache_invalidate_page(struct page *page, 116 struct inode *inode) {} 117static inline int 118cifs_readpage_from_fscache(struct inode *inode, struct page *page) 119{ 120 return -ENOBUFS; 121} 122 123static inline int cifs_readpages_from_fscache(struct inode *inode, 124 struct address_space *mapping, 125 struct list_head *pages, 126 unsigned *nr_pages) 127{ 128 return -ENOBUFS; 129} 130 131static inline void cifs_readpage_to_fscache(struct inode *inode, 132 struct page *page) {} 133 134#endif /* CONFIG_CIFS_FSCACHE */ 135 136#endif /* _CIFS_FSCACHE_H */ 137