linux/fs/ceph/cache.h
<<
>>
Prefs
   1/*
   2 * Ceph cache definitions.
   3 *
   4 *  Copyright (C) 2013 by Adfin Solutions, Inc. All Rights Reserved.
   5 *  Written by Milosz Tanski (milosz@adfin.com)
   6 *
   7 *  This program is free software; you can redistribute it and/or modify
   8 *  it under the terms of the GNU General Public License version 2
   9 *  as published by the Free Software Foundation.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *  GNU General Public License for more details.
  15 *
  16 *  You should have received a copy of the GNU General Public License
  17 *  along with this program; if not, write to:
  18 *  Free Software Foundation
  19 *  51 Franklin Street, Fifth Floor
  20 *  Boston, MA  02111-1301  USA
  21 *
  22 */
  23
  24#ifndef _CEPH_CACHE_H
  25#define _CEPH_CACHE_H
  26
  27#ifdef CONFIG_CEPH_FSCACHE
  28
  29extern struct fscache_netfs ceph_cache_netfs;
  30
  31int ceph_fscache_register(void);
  32void ceph_fscache_unregister(void);
  33
  34int ceph_fscache_register_fs(struct ceph_fs_client* fsc);
  35void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc);
  36
  37void ceph_fscache_register_inode_cookie(struct inode *inode);
  38void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci);
  39void ceph_fscache_file_set_cookie(struct inode *inode, struct file *filp);
  40void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci);
  41
  42int ceph_readpage_from_fscache(struct inode *inode, struct page *page);
  43int ceph_readpages_from_fscache(struct inode *inode,
  44                                struct address_space *mapping,
  45                                struct list_head *pages,
  46                                unsigned *nr_pages);
  47void ceph_readpage_to_fscache(struct inode *inode, struct page *page);
  48void ceph_invalidate_fscache_page(struct inode* inode, struct page *page);
  49
  50static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci)
  51{
  52        ci->fscache = NULL;
  53        ci->i_fscache_gen = 0;
  54}
  55
  56static inline void ceph_fscache_invalidate(struct inode *inode)
  57{
  58        fscache_invalidate(ceph_inode(inode)->fscache);
  59}
  60
  61static inline void ceph_fscache_uncache_page(struct inode *inode,
  62                                             struct page *page)
  63{
  64        struct ceph_inode_info *ci = ceph_inode(inode);
  65        return fscache_uncache_page(ci->fscache, page);
  66}
  67
  68static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
  69{
  70        struct inode* inode = page->mapping->host;
  71        struct ceph_inode_info *ci = ceph_inode(inode);
  72        return fscache_maybe_release_page(ci->fscache, page, gfp);
  73}
  74
  75static inline void ceph_fscache_readpage_cancel(struct inode *inode,
  76                                                struct page *page)
  77{
  78        struct ceph_inode_info *ci = ceph_inode(inode);
  79        if (fscache_cookie_valid(ci->fscache) && PageFsCache(page))
  80                __fscache_uncache_page(ci->fscache, page);
  81}
  82
  83static inline void ceph_fscache_readpages_cancel(struct inode *inode,
  84                                                 struct list_head *pages)
  85{
  86        struct ceph_inode_info *ci = ceph_inode(inode);
  87        return fscache_readpages_cancel(ci->fscache, pages);
  88}
  89
  90static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci)
  91{
  92        ci->i_fscache_gen = ci->i_rdcache_gen - 1;
  93}
  94
  95#else
  96
  97static inline int ceph_fscache_register(void)
  98{
  99        return 0;
 100}
 101
 102static inline void ceph_fscache_unregister(void)
 103{
 104}
 105
 106static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc)
 107{
 108        return 0;
 109}
 110
 111static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc)
 112{
 113}
 114
 115static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci)
 116{
 117}
 118
 119static inline void ceph_fscache_register_inode_cookie(struct inode *inode)
 120{
 121}
 122
 123static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci)
 124{
 125}
 126
 127static inline void ceph_fscache_file_set_cookie(struct inode *inode,
 128                                                struct file *filp)
 129{
 130}
 131
 132static inline void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci)
 133{
 134}
 135
 136static inline void ceph_fscache_uncache_page(struct inode *inode,
 137                                             struct page *pages)
 138{
 139}
 140
 141static inline int ceph_readpage_from_fscache(struct inode* inode,
 142                                             struct page *page)
 143{
 144        return -ENOBUFS;
 145}
 146
 147static inline int ceph_readpages_from_fscache(struct inode *inode,
 148                                              struct address_space *mapping,
 149                                              struct list_head *pages,
 150                                              unsigned *nr_pages)
 151{
 152        return -ENOBUFS;
 153}
 154
 155static inline void ceph_readpage_to_fscache(struct inode *inode,
 156                                            struct page *page)
 157{
 158}
 159
 160static inline void ceph_fscache_invalidate(struct inode *inode)
 161{
 162}
 163
 164static inline void ceph_invalidate_fscache_page(struct inode *inode,
 165                                                struct page *page)
 166{
 167}
 168
 169static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
 170{
 171        return 1;
 172}
 173
 174static inline void ceph_fscache_readpage_cancel(struct inode *inode,
 175                                                struct page *page)
 176{
 177}
 178
 179static inline void ceph_fscache_readpages_cancel(struct inode *inode,
 180                                                 struct list_head *pages)
 181{
 182}
 183
 184static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci)
 185{
 186}
 187
 188#endif
 189
 190#endif
 191