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_inode_init(struct ceph_inode_info *ci);
  38void ceph_fscache_register_inode_cookie(struct ceph_fs_client* fsc,
  39                                        struct ceph_inode_info* ci);
  40void ceph_fscache_unregister_inode_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);
  49void ceph_queue_revalidate(struct inode *inode);
  50
  51static inline void ceph_fscache_update_objectsize(struct inode *inode)
  52{
  53        struct ceph_inode_info *ci = ceph_inode(inode);
  54        fscache_attr_changed(ci->fscache);
  55}
  56
  57static inline void ceph_fscache_invalidate(struct inode *inode)
  58{
  59        fscache_invalidate(ceph_inode(inode)->fscache);
  60}
  61
  62static inline void ceph_fscache_uncache_page(struct inode *inode,
  63                                             struct page *page)
  64{
  65        struct ceph_inode_info *ci = ceph_inode(inode);
  66        return fscache_uncache_page(ci->fscache, page);
  67}
  68
  69static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
  70{
  71        struct inode* inode = page->mapping->host;
  72        struct ceph_inode_info *ci = ceph_inode(inode);
  73        return fscache_maybe_release_page(ci->fscache, page, gfp);
  74}
  75
  76static inline void ceph_fscache_readpage_cancel(struct inode *inode,
  77                                                struct page *page)
  78{
  79        struct ceph_inode_info *ci = ceph_inode(inode);
  80        if (fscache_cookie_valid(ci->fscache) && PageFsCache(page))
  81                __fscache_uncache_page(ci->fscache, page);
  82}
  83
  84static inline void ceph_fscache_readpages_cancel(struct inode *inode,
  85                                                 struct list_head *pages)
  86{
  87        struct ceph_inode_info *ci = ceph_inode(inode);
  88        return fscache_readpages_cancel(ci->fscache, pages);
  89}
  90
  91#else
  92
  93static inline int ceph_fscache_register(void)
  94{
  95        return 0;
  96}
  97
  98static inline void ceph_fscache_unregister(void)
  99{
 100}
 101
 102static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc)
 103{
 104        return 0;
 105}
 106
 107static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc)
 108{
 109}
 110
 111static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci)
 112{
 113}
 114
 115static inline void ceph_fscache_register_inode_cookie(struct ceph_fs_client* parent_fsc,
 116                                                      struct ceph_inode_info* ci)
 117{
 118}
 119
 120static inline void ceph_fscache_uncache_page(struct inode *inode,
 121                                             struct page *pages)
 122{
 123}
 124
 125static inline int ceph_readpage_from_fscache(struct inode* inode,
 126                                             struct page *page)
 127{
 128        return -ENOBUFS;
 129}
 130
 131static inline int ceph_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 ceph_readpage_to_fscache(struct inode *inode,
 140                                            struct page *page)
 141{
 142}
 143
 144static inline void ceph_fscache_update_objectsize(struct inode *inode)
 145{
 146}
 147
 148static inline void ceph_fscache_invalidate(struct inode *inode)
 149{
 150}
 151
 152static inline void ceph_invalidate_fscache_page(struct inode *inode,
 153                                                struct page *page)
 154{
 155}
 156
 157static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci)
 158{
 159}
 160
 161static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
 162{
 163        return 1;
 164}
 165
 166static inline void ceph_fscache_readpage_cancel(struct inode *inode,
 167                                                struct page *page)
 168{
 169}
 170
 171static inline void ceph_fscache_readpages_cancel(struct inode *inode,
 172                                                 struct list_head *pages)
 173{
 174}
 175
 176static inline void ceph_queue_revalidate(struct inode *inode)
 177{
 178}
 179
 180#endif
 181
 182#endif
 183