1f327613224e3 (Thomas Gleixner 2019-05-28 09:57:16 -0700 1) /* SPDX-License-Identifier: GPL-2.0-only */
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 2) /*
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 3) * V9FS cache definitions.
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 4) *
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 5) * Copyright (C) 2009 by Abhishek Kulkarni <adkulkar@umail.iu.edu>
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 6) */
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 7)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 8) #ifndef _9P_CACHE_H
7c7afc440c8ec (Tzvetelin Katchov 2015-10-07 20:15:21 -0400 9) #define _9P_CACHE_H
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 10) #ifdef CONFIG_9P_FSCACHE
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 11) #include <linux/fscache.h>
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 12) #include <linux/spinlock.h>
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 13)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 14) extern struct fscache_netfs v9fs_cache_netfs;
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 15) extern const struct fscache_cookie_def v9fs_cache_session_index_def;
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 16) extern const struct fscache_cookie_def v9fs_cache_inode_index_def;
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 17)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 18) extern void v9fs_cache_session_get_cookie(struct v9fs_session_info *v9ses);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 19) extern void v9fs_cache_session_put_cookie(struct v9fs_session_info *v9ses);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 20)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 21) extern void v9fs_cache_inode_get_cookie(struct inode *inode);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 22) extern void v9fs_cache_inode_put_cookie(struct inode *inode);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 23) extern void v9fs_cache_inode_flush_cookie(struct inode *inode);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 24) extern void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *filp);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 25) extern void v9fs_cache_inode_reset_cookie(struct inode *inode);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 26)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 27) extern int __v9fs_cache_register(void);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 28) extern void __v9fs_cache_unregister(void);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 29)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 30) extern int __v9fs_fscache_release_page(struct page *page, gfp_t gfp);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 31) extern void __v9fs_fscache_invalidate_page(struct page *page);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 32) extern int __v9fs_readpage_from_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 33) struct page *page);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 34) extern int __v9fs_readpages_from_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 35) struct address_space *mapping,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 36) struct list_head *pages,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 37) unsigned *nr_pages);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 38) extern void __v9fs_readpage_to_fscache(struct inode *inode, struct page *page);
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 39) extern void __v9fs_fscache_wait_on_page_write(struct inode *inode,
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 40) struct page *page);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 41)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 42) static inline int v9fs_fscache_release_page(struct page *page,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 43) gfp_t gfp)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 44) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 45) return __v9fs_fscache_release_page(page, gfp);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 46) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 47)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 48) static inline void v9fs_fscache_invalidate_page(struct page *page)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 49) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 50) __v9fs_fscache_invalidate_page(page);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 51) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 52)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 53) static inline int v9fs_readpage_from_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 54) struct page *page)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 55) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 56) return __v9fs_readpage_from_fscache(inode, page);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 57) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 58)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 59) static inline int v9fs_readpages_from_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 60) struct address_space *mapping,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 61) struct list_head *pages,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 62) unsigned *nr_pages)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 63) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 64) return __v9fs_readpages_from_fscache(inode, mapping, pages,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 65) nr_pages);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 66) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 67)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 68) static inline void v9fs_readpage_to_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 69) struct page *page)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 70) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 71) if (PageFsCache(page))
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 72) __v9fs_readpage_to_fscache(inode, page);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 73) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 74)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 75) static inline void v9fs_uncache_page(struct inode *inode, struct page *page)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 76) {
a78ce05d5d342 (Aneesh Kumar K.V 2011-02-28 17:04:02 +0530 77) struct v9fs_inode *v9inode = V9FS_I(inode);
a78ce05d5d342 (Aneesh Kumar K.V 2011-02-28 17:04:02 +0530 78) fscache_uncache_page(v9inode->fscache, page);
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 79) BUG_ON(PageFsCache(page));
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 80) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 81)
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 82) static inline void v9fs_fscache_wait_on_page_write(struct inode *inode,
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 83) struct page *page)
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 84) {
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 85) return __v9fs_fscache_wait_on_page_write(inode, page);
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 86) }
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 87)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 88) #else /* CONFIG_9P_FSCACHE */
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 89)
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 90) static inline void v9fs_cache_inode_get_cookie(struct inode *inode)
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 91) {
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 92) }
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 93)
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 94) static inline void v9fs_cache_inode_put_cookie(struct inode *inode)
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 95) {
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 96) }
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 97)
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 98) static inline void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *file)
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 99) {
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 100) }
ceaec15d49f29 (Al Viro 2013-09-17 08:07:11 -0400 101)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 102) static inline int v9fs_fscache_release_page(struct page *page,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 103) gfp_t gfp) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 104) return 1;
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 105) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 106)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 107) static inline void v9fs_fscache_invalidate_page(struct page *page) {}
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 108)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 109) static inline int v9fs_readpage_from_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 110) struct page *page)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 111) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 112) return -ENOBUFS;
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 113) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 114)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 115) static inline int v9fs_readpages_from_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 116) struct address_space *mapping,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 117) struct list_head *pages,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 118) unsigned *nr_pages)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 119) {
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 120) return -ENOBUFS;
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 121) }
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 122)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 123) static inline void v9fs_readpage_to_fscache(struct inode *inode,
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 124) struct page *page)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 125) {}
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 126)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 127) static inline void v9fs_uncache_page(struct inode *inode, struct page *page)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 128) {}
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 129)
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 130) static inline void v9fs_fscache_wait_on_page_write(struct inode *inode,
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 131) struct page *page)
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 132) {
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 133) return;
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 134) }
2efda7998bbc5 (Aneesh Kumar K.V 2011-02-28 17:03:56 +0530 135)
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 136) #endif /* CONFIG_9P_FSCACHE */
60e78d2c993e5 (Abhishek Kulkarni 2009-09-23 13:00:27 -0500 137) #endif /* _9P_CACHE_H */