Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.17-rc2 156 lines 3.8 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Ceph cache definitions. 4 * 5 * Copyright (C) 2013 by Adfin Solutions, Inc. All Rights Reserved. 6 * Written by Milosz Tanski (milosz@adfin.com) 7 */ 8 9#ifndef _CEPH_CACHE_H 10#define _CEPH_CACHE_H 11 12#include <linux/netfs.h> 13 14#ifdef CONFIG_CEPH_FSCACHE 15#include <linux/fscache.h> 16 17int ceph_fscache_register_fs(struct ceph_fs_client* fsc, struct fs_context *fc); 18void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc); 19 20void ceph_fscache_register_inode_cookie(struct inode *inode); 21void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci); 22 23void ceph_fscache_use_cookie(struct inode *inode, bool will_modify); 24void ceph_fscache_unuse_cookie(struct inode *inode, bool update); 25 26void ceph_fscache_update(struct inode *inode); 27void ceph_fscache_invalidate(struct inode *inode, bool dio_write); 28 29static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 30{ 31 ci->fscache = NULL; 32} 33 34static inline struct fscache_cookie *ceph_fscache_cookie(struct ceph_inode_info *ci) 35{ 36 return ci->fscache; 37} 38 39static inline void ceph_fscache_resize(struct inode *inode, loff_t to) 40{ 41 struct ceph_inode_info *ci = ceph_inode(inode); 42 struct fscache_cookie *cookie = ceph_fscache_cookie(ci); 43 44 if (cookie) { 45 ceph_fscache_use_cookie(inode, true); 46 fscache_resize_cookie(cookie, to); 47 ceph_fscache_unuse_cookie(inode, true); 48 } 49} 50 51static inline void ceph_fscache_unpin_writeback(struct inode *inode, 52 struct writeback_control *wbc) 53{ 54 fscache_unpin_writeback(wbc, ceph_fscache_cookie(ceph_inode(inode))); 55} 56 57static inline int ceph_fscache_set_page_dirty(struct page *page) 58{ 59 struct inode *inode = page->mapping->host; 60 struct ceph_inode_info *ci = ceph_inode(inode); 61 62 return fscache_set_page_dirty(page, ceph_fscache_cookie(ci)); 63} 64 65static inline int ceph_begin_cache_operation(struct netfs_read_request *rreq) 66{ 67 struct fscache_cookie *cookie = ceph_fscache_cookie(ceph_inode(rreq->inode)); 68 69 return fscache_begin_read_operation(&rreq->cache_resources, cookie); 70} 71 72static inline bool ceph_is_cache_enabled(struct inode *inode) 73{ 74 return fscache_cookie_enabled(ceph_fscache_cookie(ceph_inode(inode))); 75} 76 77static inline void ceph_fscache_note_page_release(struct inode *inode) 78{ 79 struct ceph_inode_info *ci = ceph_inode(inode); 80 81 fscache_note_page_release(ceph_fscache_cookie(ci)); 82} 83#else /* CONFIG_CEPH_FSCACHE */ 84static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc, 85 struct fs_context *fc) 86{ 87 return 0; 88} 89 90static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc) 91{ 92} 93 94static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 95{ 96} 97 98static inline void ceph_fscache_register_inode_cookie(struct inode *inode) 99{ 100} 101 102static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci) 103{ 104} 105 106static inline void ceph_fscache_use_cookie(struct inode *inode, bool will_modify) 107{ 108} 109 110static inline void ceph_fscache_unuse_cookie(struct inode *inode, bool update) 111{ 112} 113 114static inline void ceph_fscache_update(struct inode *inode) 115{ 116} 117 118static inline void ceph_fscache_invalidate(struct inode *inode, bool dio_write) 119{ 120} 121 122static inline struct fscache_cookie *ceph_fscache_cookie(struct ceph_inode_info *ci) 123{ 124 return NULL; 125} 126 127static inline void ceph_fscache_resize(struct inode *inode, loff_t to) 128{ 129} 130 131static inline void ceph_fscache_unpin_writeback(struct inode *inode, 132 struct writeback_control *wbc) 133{ 134} 135 136static inline int ceph_fscache_set_page_dirty(struct page *page) 137{ 138 return __set_page_dirty_nobuffers(page); 139} 140 141static inline bool ceph_is_cache_enabled(struct inode *inode) 142{ 143 return false; 144} 145 146static inline int ceph_begin_cache_operation(struct netfs_read_request *rreq) 147{ 148 return -ENOBUFS; 149} 150 151static inline void ceph_fscache_note_page_release(struct inode *inode) 152{ 153} 154#endif /* CONFIG_CEPH_FSCACHE */ 155 156#endif