1*99ccbd22SMilosz Tanski /* 2*99ccbd22SMilosz Tanski * Ceph cache definitions. 3*99ccbd22SMilosz Tanski * 4*99ccbd22SMilosz Tanski * Copyright (C) 2013 by Adfin Solutions, Inc. All Rights Reserved. 5*99ccbd22SMilosz Tanski * Written by Milosz Tanski (milosz@adfin.com) 6*99ccbd22SMilosz Tanski * 7*99ccbd22SMilosz Tanski * This program is free software; you can redistribute it and/or modify 8*99ccbd22SMilosz Tanski * it under the terms of the GNU General Public License version 2 9*99ccbd22SMilosz Tanski * as published by the Free Software Foundation. 10*99ccbd22SMilosz Tanski * 11*99ccbd22SMilosz Tanski * This program is distributed in the hope that it will be useful, 12*99ccbd22SMilosz Tanski * but WITHOUT ANY WARRANTY; without even the implied warranty of 13*99ccbd22SMilosz Tanski * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*99ccbd22SMilosz Tanski * GNU General Public License for more details. 15*99ccbd22SMilosz Tanski * 16*99ccbd22SMilosz Tanski * You should have received a copy of the GNU General Public License 17*99ccbd22SMilosz Tanski * along with this program; if not, write to: 18*99ccbd22SMilosz Tanski * Free Software Foundation 19*99ccbd22SMilosz Tanski * 51 Franklin Street, Fifth Floor 20*99ccbd22SMilosz Tanski * Boston, MA 02111-1301 USA 21*99ccbd22SMilosz Tanski * 22*99ccbd22SMilosz Tanski */ 23*99ccbd22SMilosz Tanski 24*99ccbd22SMilosz Tanski #ifndef _CEPH_CACHE_H 25*99ccbd22SMilosz Tanski #define _CEPH_CACHE_H 26*99ccbd22SMilosz Tanski 27*99ccbd22SMilosz Tanski #ifdef CONFIG_CEPH_FSCACHE 28*99ccbd22SMilosz Tanski 29*99ccbd22SMilosz Tanski int ceph_fscache_register(void); 30*99ccbd22SMilosz Tanski void ceph_fscache_unregister(void); 31*99ccbd22SMilosz Tanski 32*99ccbd22SMilosz Tanski int ceph_fscache_register_fs(struct ceph_fs_client* fsc); 33*99ccbd22SMilosz Tanski void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc); 34*99ccbd22SMilosz Tanski 35*99ccbd22SMilosz Tanski void ceph_fscache_inode_init(struct ceph_inode_info *ci); 36*99ccbd22SMilosz Tanski void ceph_fscache_register_inode_cookie(struct ceph_fs_client* fsc, 37*99ccbd22SMilosz Tanski struct ceph_inode_info* ci); 38*99ccbd22SMilosz Tanski void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci); 39*99ccbd22SMilosz Tanski 40*99ccbd22SMilosz Tanski int ceph_readpage_from_fscache(struct inode *inode, struct page *page); 41*99ccbd22SMilosz Tanski int ceph_readpages_from_fscache(struct inode *inode, 42*99ccbd22SMilosz Tanski struct address_space *mapping, 43*99ccbd22SMilosz Tanski struct list_head *pages, 44*99ccbd22SMilosz Tanski unsigned *nr_pages); 45*99ccbd22SMilosz Tanski void ceph_readpage_to_fscache(struct inode *inode, struct page *page); 46*99ccbd22SMilosz Tanski void ceph_invalidate_fscache_page(struct inode* inode, struct page *page); 47*99ccbd22SMilosz Tanski void ceph_queue_revalidate(struct inode *inode); 48*99ccbd22SMilosz Tanski 49*99ccbd22SMilosz Tanski static inline void ceph_fscache_invalidate(struct inode *inode) 50*99ccbd22SMilosz Tanski { 51*99ccbd22SMilosz Tanski fscache_invalidate(ceph_inode(inode)->fscache); 52*99ccbd22SMilosz Tanski } 53*99ccbd22SMilosz Tanski 54*99ccbd22SMilosz Tanski static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp) 55*99ccbd22SMilosz Tanski { 56*99ccbd22SMilosz Tanski struct inode* inode = page->mapping->host; 57*99ccbd22SMilosz Tanski struct ceph_inode_info *ci = ceph_inode(inode); 58*99ccbd22SMilosz Tanski return fscache_maybe_release_page(ci->fscache, page, gfp); 59*99ccbd22SMilosz Tanski } 60*99ccbd22SMilosz Tanski 61*99ccbd22SMilosz Tanski #else 62*99ccbd22SMilosz Tanski 63*99ccbd22SMilosz Tanski static inline int ceph_fscache_register(void) 64*99ccbd22SMilosz Tanski { 65*99ccbd22SMilosz Tanski return 0; 66*99ccbd22SMilosz Tanski } 67*99ccbd22SMilosz Tanski 68*99ccbd22SMilosz Tanski static inline void ceph_fscache_unregister(void) 69*99ccbd22SMilosz Tanski { 70*99ccbd22SMilosz Tanski } 71*99ccbd22SMilosz Tanski 72*99ccbd22SMilosz Tanski static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc) 73*99ccbd22SMilosz Tanski { 74*99ccbd22SMilosz Tanski return 0; 75*99ccbd22SMilosz Tanski } 76*99ccbd22SMilosz Tanski 77*99ccbd22SMilosz Tanski static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc) 78*99ccbd22SMilosz Tanski { 79*99ccbd22SMilosz Tanski } 80*99ccbd22SMilosz Tanski 81*99ccbd22SMilosz Tanski static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 82*99ccbd22SMilosz Tanski { 83*99ccbd22SMilosz Tanski } 84*99ccbd22SMilosz Tanski 85*99ccbd22SMilosz Tanski static inline void ceph_fscache_register_inode_cookie(struct ceph_fs_client* parent_fsc, 86*99ccbd22SMilosz Tanski struct ceph_inode_info* ci) 87*99ccbd22SMilosz Tanski { 88*99ccbd22SMilosz Tanski } 89*99ccbd22SMilosz Tanski 90*99ccbd22SMilosz Tanski static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci) 91*99ccbd22SMilosz Tanski { 92*99ccbd22SMilosz Tanski } 93*99ccbd22SMilosz Tanski 94*99ccbd22SMilosz Tanski static inline int ceph_readpage_from_fscache(struct inode* inode, 95*99ccbd22SMilosz Tanski struct page *page) 96*99ccbd22SMilosz Tanski { 97*99ccbd22SMilosz Tanski return -ENOBUFS; 98*99ccbd22SMilosz Tanski } 99*99ccbd22SMilosz Tanski 100*99ccbd22SMilosz Tanski static inline int ceph_readpages_from_fscache(struct inode *inode, 101*99ccbd22SMilosz Tanski struct address_space *mapping, 102*99ccbd22SMilosz Tanski struct list_head *pages, 103*99ccbd22SMilosz Tanski unsigned *nr_pages) 104*99ccbd22SMilosz Tanski { 105*99ccbd22SMilosz Tanski return -ENOBUFS; 106*99ccbd22SMilosz Tanski } 107*99ccbd22SMilosz Tanski 108*99ccbd22SMilosz Tanski static inline void ceph_readpage_to_fscache(struct inode *inode, 109*99ccbd22SMilosz Tanski struct page *page) 110*99ccbd22SMilosz Tanski { 111*99ccbd22SMilosz Tanski } 112*99ccbd22SMilosz Tanski 113*99ccbd22SMilosz Tanski static inline void ceph_fscache_invalidate(struct inode *inode) 114*99ccbd22SMilosz Tanski { 115*99ccbd22SMilosz Tanski } 116*99ccbd22SMilosz Tanski 117*99ccbd22SMilosz Tanski static inline void ceph_invalidate_fscache_page(struct inode *inode, 118*99ccbd22SMilosz Tanski struct page *page) 119*99ccbd22SMilosz Tanski { 120*99ccbd22SMilosz Tanski } 121*99ccbd22SMilosz Tanski 122*99ccbd22SMilosz Tanski static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp) 123*99ccbd22SMilosz Tanski { 124*99ccbd22SMilosz Tanski return 1; 125*99ccbd22SMilosz Tanski } 126*99ccbd22SMilosz Tanski 127*99ccbd22SMilosz Tanski static inline void ceph_fscache_readpages_cancel(struct inode *inode, 128*99ccbd22SMilosz Tanski struct list_head *pages) 129*99ccbd22SMilosz Tanski { 130*99ccbd22SMilosz Tanski } 131*99ccbd22SMilosz Tanski 132*99ccbd22SMilosz Tanski static inline void ceph_queue_revalidate(struct inode *inode) 133*99ccbd22SMilosz Tanski { 134*99ccbd22SMilosz Tanski } 135*99ccbd22SMilosz Tanski 136*99ccbd22SMilosz Tanski #endif 137*99ccbd22SMilosz Tanski 138*99ccbd22SMilosz Tanski #endif 139