linux/fs/cifs/fscache.h
<<
>>
Prefs
   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