]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - include/linux/fscache.h
Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
[mv-sheeva.git] / include / linux / fscache.h
index b195c2e1ef6a9cebc283bcb9acc260bb8420efb6..6d8ee466e0a00a8b3f4e98927a373869dfee9726 100644 (file)
@@ -178,6 +178,31 @@ extern void __fscache_unregister_netfs(struct fscache_netfs *);
 extern struct fscache_cache_tag *__fscache_lookup_cache_tag(const char *);
 extern void __fscache_release_cache_tag(struct fscache_cache_tag *);
 
+extern struct fscache_cookie *__fscache_acquire_cookie(
+       struct fscache_cookie *,
+       const struct fscache_cookie_def *,
+       void *);
+extern void __fscache_relinquish_cookie(struct fscache_cookie *, int);
+extern void __fscache_update_cookie(struct fscache_cookie *);
+extern int __fscache_attr_changed(struct fscache_cookie *);
+extern int __fscache_read_or_alloc_page(struct fscache_cookie *,
+                                       struct page *,
+                                       fscache_rw_complete_t,
+                                       void *,
+                                       gfp_t);
+extern int __fscache_read_or_alloc_pages(struct fscache_cookie *,
+                                        struct address_space *,
+                                        struct list_head *,
+                                        unsigned *,
+                                        fscache_rw_complete_t,
+                                        void *,
+                                        gfp_t);
+extern int __fscache_alloc_page(struct fscache_cookie *, struct page *, gfp_t);
+extern int __fscache_write_page(struct fscache_cookie *, struct page *, gfp_t);
+extern void __fscache_uncache_page(struct fscache_cookie *, struct page *);
+extern bool __fscache_check_page_write(struct fscache_cookie *, struct page *);
+extern void __fscache_wait_on_page_write(struct fscache_cookie *, struct page *);
+
 /**
  * fscache_register_netfs - Register a filesystem as desiring caching services
  * @netfs: The description of the filesystem
@@ -269,7 +294,10 @@ struct fscache_cookie *fscache_acquire_cookie(
        const struct fscache_cookie_def *def,
        void *netfs_data)
 {
-       return NULL;
+       if (fscache_cookie_valid(parent))
+               return __fscache_acquire_cookie(parent, def, netfs_data);
+       else
+               return NULL;
 }
 
 /**
@@ -287,6 +315,8 @@ struct fscache_cookie *fscache_acquire_cookie(
 static inline
 void fscache_relinquish_cookie(struct fscache_cookie *cookie, int retire)
 {
+       if (fscache_cookie_valid(cookie))
+               __fscache_relinquish_cookie(cookie, retire);
 }
 
 /**
@@ -302,6 +332,8 @@ void fscache_relinquish_cookie(struct fscache_cookie *cookie, int retire)
 static inline
 void fscache_update_cookie(struct fscache_cookie *cookie)
 {
+       if (fscache_cookie_valid(cookie))
+               __fscache_update_cookie(cookie);
 }
 
 /**
@@ -347,7 +379,10 @@ void fscache_unpin_cookie(struct fscache_cookie *cookie)
 static inline
 int fscache_attr_changed(struct fscache_cookie *cookie)
 {
-       return -ENOBUFS;
+       if (fscache_cookie_valid(cookie))
+               return __fscache_attr_changed(cookie);
+       else
+               return -ENOBUFS;
 }
 
 /**
@@ -404,7 +439,11 @@ int fscache_read_or_alloc_page(struct fscache_cookie *cookie,
                               void *context,
                               gfp_t gfp)
 {
-       return -ENOBUFS;
+       if (fscache_cookie_valid(cookie))
+               return __fscache_read_or_alloc_page(cookie, page, end_io_func,
+                                                   context, gfp);
+       else
+               return -ENOBUFS;
 }
 
 /**
@@ -450,7 +489,12 @@ int fscache_read_or_alloc_pages(struct fscache_cookie *cookie,
                                void *context,
                                gfp_t gfp)
 {
-       return -ENOBUFS;
+       if (fscache_cookie_valid(cookie))
+               return __fscache_read_or_alloc_pages(cookie, mapping, pages,
+                                                    nr_pages, end_io_func,
+                                                    context, gfp);
+       else
+               return -ENOBUFS;
 }
 
 /**
@@ -476,7 +520,10 @@ int fscache_alloc_page(struct fscache_cookie *cookie,
                       struct page *page,
                       gfp_t gfp)
 {
-       return -ENOBUFS;
+       if (fscache_cookie_valid(cookie))
+               return __fscache_alloc_page(cookie, page, gfp);
+       else
+               return -ENOBUFS;
 }
 
 /**
@@ -502,7 +549,10 @@ int fscache_write_page(struct fscache_cookie *cookie,
                       struct page *page,
                       gfp_t gfp)
 {
-       return -ENOBUFS;
+       if (fscache_cookie_valid(cookie))
+               return __fscache_write_page(cookie, page, gfp);
+       else
+               return -ENOBUFS;
 }
 
 /**
@@ -523,6 +573,8 @@ static inline
 void fscache_uncache_page(struct fscache_cookie *cookie,
                          struct page *page)
 {
+       if (fscache_cookie_valid(cookie))
+               __fscache_uncache_page(cookie, page);
 }
 
 /**
@@ -539,6 +591,8 @@ static inline
 bool fscache_check_page_write(struct fscache_cookie *cookie,
                              struct page *page)
 {
+       if (fscache_cookie_valid(cookie))
+               return __fscache_check_page_write(cookie, page);
        return false;
 }
 
@@ -557,6 +611,8 @@ static inline
 void fscache_wait_on_page_write(struct fscache_cookie *cookie,
                                struct page *page)
 {
+       if (fscache_cookie_valid(cookie))
+               __fscache_wait_on_page_write(cookie, page);
 }
 
 #endif /* _LINUX_FSCACHE_H */