Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
page.c
Go to the documentation of this file.
1 /* Cache page management and data I/O routines
2  *
3  * Copyright (C) 2004-2008 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells ([email protected])
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
11 
12 #define FSCACHE_DEBUG_LEVEL PAGE
13 #include <linux/module.h>
14 #include <linux/fscache-cache.h>
15 #include <linux/buffer_head.h>
16 #include <linux/pagevec.h>
17 #include <linux/slab.h>
18 #include "internal.h"
19 
20 /*
21  * check to see if a page is being written to the cache
22  */
24 {
25  void *val;
26 
27  rcu_read_lock();
28  val = radix_tree_lookup(&cookie->stores, page->index);
29  rcu_read_unlock();
30 
31  return val != NULL;
32 }
34 
35 /*
36  * wait for a page to finish being written to the cache
37  */
39 {
40  wait_queue_head_t *wq = bit_waitqueue(&cookie->flags, 0);
41 
42  wait_event(*wq, !__fscache_check_page_write(cookie, page));
43 }
45 
46 /*
47  * decide whether a page can be released, possibly by cancelling a store to it
48  * - we're allowed to sleep if __GFP_WAIT is flagged
49  */
51  struct page *page,
52  gfp_t gfp)
53 {
54  struct page *xpage;
55  void *val;
56 
57  _enter("%p,%p,%x", cookie, page, gfp);
58 
59  rcu_read_lock();
60  val = radix_tree_lookup(&cookie->stores, page->index);
61  if (!val) {
62  rcu_read_unlock();
64  __fscache_uncache_page(cookie, page);
65  return true;
66  }
67 
68  /* see if the page is actually undergoing storage - if so we can't get
69  * rid of it till the cache has finished with it */
70  if (radix_tree_tag_get(&cookie->stores, page->index,
72  rcu_read_unlock();
73  goto page_busy;
74  }
75 
76  /* the page is pending storage, so we attempt to cancel the store and
77  * discard the store request so that the page can be reclaimed */
78  spin_lock(&cookie->stores_lock);
79  rcu_read_unlock();
80 
81  if (radix_tree_tag_get(&cookie->stores, page->index,
83  /* the page started to undergo storage whilst we were looking,
84  * so now we can only wait or return */
85  spin_unlock(&cookie->stores_lock);
86  goto page_busy;
87  }
88 
89  xpage = radix_tree_delete(&cookie->stores, page->index);
90  spin_unlock(&cookie->stores_lock);
91 
92  if (xpage) {
95  ASSERTCMP(xpage, ==, page);
96  } else {
98  }
99 
100  wake_up_bit(&cookie->flags, 0);
101  if (xpage)
102  page_cache_release(xpage);
103  __fscache_uncache_page(cookie, page);
104  return true;
105 
106 page_busy:
107  /* we might want to wait here, but that could deadlock the allocator as
108  * the work threads writing to the cache may all end up sleeping
109  * on memory allocation */
111  return false;
112 }
114 
115 /*
116  * note that a page has finished being written to the cache
117  */
118 static void fscache_end_page_write(struct fscache_object *object,
119  struct page *page)
120 {
121  struct fscache_cookie *cookie;
122  struct page *xpage = NULL;
123 
124  spin_lock(&object->lock);
125  cookie = object->cookie;
126  if (cookie) {
127  /* delete the page from the tree if it is now no longer
128  * pending */
129  spin_lock(&cookie->stores_lock);
130  radix_tree_tag_clear(&cookie->stores, page->index,
132  if (!radix_tree_tag_get(&cookie->stores, page->index,
135  xpage = radix_tree_delete(&cookie->stores, page->index);
136  }
137  spin_unlock(&cookie->stores_lock);
138  wake_up_bit(&cookie->flags, 0);
139  }
140  spin_unlock(&object->lock);
141  if (xpage)
142  page_cache_release(xpage);
143 }
144 
145 /*
146  * actually apply the changed attributes to a cache object
147  */
148 static void fscache_attr_changed_op(struct fscache_operation *op)
149 {
150  struct fscache_object *object = op->object;
151  int ret;
152 
153  _enter("{OBJ%x OP%x}", object->debug_id, op->debug_id);
154 
156 
157  if (fscache_object_is_active(object)) {
159  ret = object->cache->ops->attr_changed(object);
161  if (ret < 0)
162  fscache_abort_object(object);
163  }
164 
165  _leave("");
166 }
167 
168 /*
169  * notification that the attributes on an object have changed
170  */
172 {
173  struct fscache_operation *op;
174  struct fscache_object *object;
175 
176  _enter("%p", cookie);
177 
178  ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
179 
181 
182  op = kzalloc(sizeof(*op), GFP_KERNEL);
183  if (!op) {
185  _leave(" = -ENOMEM");
186  return -ENOMEM;
187  }
188 
189  fscache_operation_init(op, fscache_attr_changed_op, NULL);
191 
192  spin_lock(&cookie->lock);
193 
194  if (hlist_empty(&cookie->backing_objects))
195  goto nobufs;
196  object = hlist_entry(cookie->backing_objects.first,
197  struct fscache_object, cookie_link);
198 
199  if (fscache_submit_exclusive_op(object, op) < 0)
200  goto nobufs;
201  spin_unlock(&cookie->lock);
204  _leave(" = 0");
205  return 0;
206 
207 nobufs:
208  spin_unlock(&cookie->lock);
209  kfree(op);
211  _leave(" = %d", -ENOBUFS);
212  return -ENOBUFS;
213 }
215 
216 /*
217  * release a retrieval op reference
218  */
219 static void fscache_release_retrieval_op(struct fscache_operation *_op)
220 {
221  struct fscache_retrieval *op =
222  container_of(_op, struct fscache_retrieval, op);
223 
224  _enter("{OP%x}", op->op.debug_id);
225 
227  if (op->context)
228  fscache_put_context(op->op.object->cookie, op->context);
229 
230  _leave("");
231 }
232 
233 /*
234  * allocate a retrieval op
235  */
236 static struct fscache_retrieval *fscache_alloc_retrieval(
237  struct address_space *mapping,
239  void *context)
240 {
241  struct fscache_retrieval *op;
242 
243  /* allocate a retrieval operation and attempt to submit it */
244  op = kzalloc(sizeof(*op), GFP_NOIO);
245  if (!op) {
247  return NULL;
248  }
249 
250  fscache_operation_init(&op->op, NULL, fscache_release_retrieval_op);
251  op->op.flags = FSCACHE_OP_MYTHREAD | (1 << FSCACHE_OP_WAITING);
252  op->mapping = mapping;
253  op->end_io_func = end_io_func;
254  op->context = context;
255  op->start_time = jiffies;
256  INIT_LIST_HEAD(&op->to_do);
257  return op;
258 }
259 
260 /*
261  * wait for a deferred lookup to complete
262  */
263 static int fscache_wait_for_deferred_lookup(struct fscache_cookie *cookie)
264 {
265  unsigned long jif;
266 
267  _enter("");
268 
269  if (!test_bit(FSCACHE_COOKIE_LOOKING_UP, &cookie->flags)) {
270  _leave(" = 0 [imm]");
271  return 0;
272  }
273 
275 
276  jif = jiffies;
277  if (wait_on_bit(&cookie->flags, FSCACHE_COOKIE_LOOKING_UP,
279  TASK_INTERRUPTIBLE) != 0) {
281  _leave(" = -ERESTARTSYS");
282  return -ERESTARTSYS;
283  }
284 
286 
287  smp_rmb();
289  _leave(" = 0 [dly]");
290  return 0;
291 }
292 
293 /*
294  * wait for an object to become active (or dead)
295  */
296 static int fscache_wait_for_retrieval_activation(struct fscache_object *object,
297  struct fscache_retrieval *op,
298  atomic_t *stat_op_waits,
299  atomic_t *stat_object_dead)
300 {
301  int ret;
302 
303  if (!test_bit(FSCACHE_OP_WAITING, &op->op.flags))
304  goto check_if_dead;
305 
306  _debug(">>> WT");
307  fscache_stat(stat_op_waits);
308  if (wait_on_bit(&op->op.flags, FSCACHE_OP_WAITING,
310  TASK_INTERRUPTIBLE) < 0) {
311  ret = fscache_cancel_op(&op->op);
312  if (ret == 0)
313  return -ERESTARTSYS;
314 
315  /* it's been removed from the pending queue by another party,
316  * so we should get to run shortly */
317  wait_on_bit(&op->op.flags, FSCACHE_OP_WAITING,
319  }
320  _debug("<<< GO");
321 
322 check_if_dead:
323  if (unlikely(fscache_object_is_dead(object))) {
324  fscache_stat(stat_object_dead);
325  return -ENOBUFS;
326  }
327  return 0;
328 }
329 
330 /*
331  * read a page from the cache or allocate a block in which to store it
332  * - we return:
333  * -ENOMEM - out of memory, nothing done
334  * -ERESTARTSYS - interrupted
335  * -ENOBUFS - no backing object available in which to cache the block
336  * -ENODATA - no data available in the backing object for this block
337  * 0 - dispatched a read - it'll call end_io_func() when finished
338  */
340  struct page *page,
341  fscache_rw_complete_t end_io_func,
342  void *context,
343  gfp_t gfp)
344 {
345  struct fscache_retrieval *op;
346  struct fscache_object *object;
347  int ret;
348 
349  _enter("%p,%p,,,", cookie, page);
350 
352 
353  if (hlist_empty(&cookie->backing_objects))
354  goto nobufs;
355 
356  ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
357  ASSERTCMP(page, !=, NULL);
358 
359  if (fscache_wait_for_deferred_lookup(cookie) < 0)
360  return -ERESTARTSYS;
361 
362  op = fscache_alloc_retrieval(page->mapping, end_io_func, context);
363  if (!op) {
364  _leave(" = -ENOMEM");
365  return -ENOMEM;
366  }
367 
368  spin_lock(&cookie->lock);
369 
370  if (hlist_empty(&cookie->backing_objects))
371  goto nobufs_unlock;
372  object = hlist_entry(cookie->backing_objects.first,
373  struct fscache_object, cookie_link);
374 
376 
377  atomic_inc(&object->n_reads);
378  set_bit(FSCACHE_OP_DEC_READ_CNT, &op->op.flags);
379 
380  if (fscache_submit_op(object, &op->op) < 0)
381  goto nobufs_unlock;
382  spin_unlock(&cookie->lock);
383 
385 
386  /* pin the netfs read context in case we need to do the actual netfs
387  * read because we've encountered a cache read failure */
388  fscache_get_context(object->cookie, op->context);
389 
390  /* we wait for the operation to become active, and then process it
391  * *here*, in this thread, and not in the thread pool */
392  ret = fscache_wait_for_retrieval_activation(
393  object, op,
396  if (ret < 0)
397  goto error;
398 
399  /* ask the cache to honour the operation */
400  if (test_bit(FSCACHE_COOKIE_NO_DATA_YET, &object->cookie->flags)) {
402  ret = object->cache->ops->allocate_page(op, page, gfp);
404  if (ret == 0)
405  ret = -ENODATA;
406  } else {
408  ret = object->cache->ops->read_or_alloc_page(op, page, gfp);
410  }
411 
412 error:
413  if (ret == -ENOMEM)
415  else if (ret == -ERESTARTSYS)
417  else if (ret == -ENODATA)
419  else if (ret < 0)
421  else
423 
424  fscache_put_retrieval(op);
425  _leave(" = %d", ret);
426  return ret;
427 
428 nobufs_unlock:
429  spin_unlock(&cookie->lock);
430  kfree(op);
431 nobufs:
433  _leave(" = -ENOBUFS");
434  return -ENOBUFS;
435 }
437 
438 /*
439  * read a list of page from the cache or allocate a block in which to store
440  * them
441  * - we return:
442  * -ENOMEM - out of memory, some pages may be being read
443  * -ERESTARTSYS - interrupted, some pages may be being read
444  * -ENOBUFS - no backing object or space available in which to cache any
445  * pages not being read
446  * -ENODATA - no data available in the backing object for some or all of
447  * the pages
448  * 0 - dispatched a read on all pages
449  *
450  * end_io_func() will be called for each page read from the cache as it is
451  * finishes being read
452  *
453  * any pages for which a read is dispatched will be removed from pages and
454  * nr_pages
455  */
457  struct address_space *mapping,
458  struct list_head *pages,
459  unsigned *nr_pages,
460  fscache_rw_complete_t end_io_func,
461  void *context,
462  gfp_t gfp)
463 {
464  struct fscache_retrieval *op;
465  struct fscache_object *object;
466  int ret;
467 
468  _enter("%p,,%d,,,", cookie, *nr_pages);
469 
471 
472  if (hlist_empty(&cookie->backing_objects))
473  goto nobufs;
474 
475  ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
476  ASSERTCMP(*nr_pages, >, 0);
477  ASSERT(!list_empty(pages));
478 
479  if (fscache_wait_for_deferred_lookup(cookie) < 0)
480  return -ERESTARTSYS;
481 
482  op = fscache_alloc_retrieval(mapping, end_io_func, context);
483  if (!op)
484  return -ENOMEM;
485 
486  spin_lock(&cookie->lock);
487 
488  if (hlist_empty(&cookie->backing_objects))
489  goto nobufs_unlock;
490  object = hlist_entry(cookie->backing_objects.first,
491  struct fscache_object, cookie_link);
492 
493  atomic_inc(&object->n_reads);
494  set_bit(FSCACHE_OP_DEC_READ_CNT, &op->op.flags);
495 
496  if (fscache_submit_op(object, &op->op) < 0)
497  goto nobufs_unlock;
498  spin_unlock(&cookie->lock);
499 
501 
502  /* pin the netfs read context in case we need to do the actual netfs
503  * read because we've encountered a cache read failure */
504  fscache_get_context(object->cookie, op->context);
505 
506  /* we wait for the operation to become active, and then process it
507  * *here*, in this thread, and not in the thread pool */
508  ret = fscache_wait_for_retrieval_activation(
509  object, op,
512  if (ret < 0)
513  goto error;
514 
515  /* ask the cache to honour the operation */
516  if (test_bit(FSCACHE_COOKIE_NO_DATA_YET, &object->cookie->flags)) {
518  ret = object->cache->ops->allocate_pages(
519  op, pages, nr_pages, gfp);
521  } else {
523  ret = object->cache->ops->read_or_alloc_pages(
524  op, pages, nr_pages, gfp);
526  }
527 
528 error:
529  if (ret == -ENOMEM)
531  else if (ret == -ERESTARTSYS)
533  else if (ret == -ENODATA)
535  else if (ret < 0)
537  else
539 
540  fscache_put_retrieval(op);
541  _leave(" = %d", ret);
542  return ret;
543 
544 nobufs_unlock:
545  spin_unlock(&cookie->lock);
546  kfree(op);
547 nobufs:
549  _leave(" = -ENOBUFS");
550  return -ENOBUFS;
551 }
553 
554 /*
555  * allocate a block in the cache on which to store a page
556  * - we return:
557  * -ENOMEM - out of memory, nothing done
558  * -ERESTARTSYS - interrupted
559  * -ENOBUFS - no backing object available in which to cache the block
560  * 0 - block allocated
561  */
563  struct page *page,
564  gfp_t gfp)
565 {
566  struct fscache_retrieval *op;
567  struct fscache_object *object;
568  int ret;
569 
570  _enter("%p,%p,,,", cookie, page);
571 
573 
574  if (hlist_empty(&cookie->backing_objects))
575  goto nobufs;
576 
577  ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
578  ASSERTCMP(page, !=, NULL);
579 
580  if (fscache_wait_for_deferred_lookup(cookie) < 0)
581  return -ERESTARTSYS;
582 
583  op = fscache_alloc_retrieval(page->mapping, NULL, NULL);
584  if (!op)
585  return -ENOMEM;
586 
587  spin_lock(&cookie->lock);
588 
589  if (hlist_empty(&cookie->backing_objects))
590  goto nobufs_unlock;
591  object = hlist_entry(cookie->backing_objects.first,
592  struct fscache_object, cookie_link);
593 
594  if (fscache_submit_op(object, &op->op) < 0)
595  goto nobufs_unlock;
596  spin_unlock(&cookie->lock);
597 
599 
600  ret = fscache_wait_for_retrieval_activation(
601  object, op,
604  if (ret < 0)
605  goto error;
606 
607  /* ask the cache to honour the operation */
609  ret = object->cache->ops->allocate_page(op, page, gfp);
611 
612 error:
613  if (ret == -ERESTARTSYS)
615  else if (ret < 0)
617  else
619 
620  fscache_put_retrieval(op);
621  _leave(" = %d", ret);
622  return ret;
623 
624 nobufs_unlock:
625  spin_unlock(&cookie->lock);
626  kfree(op);
627 nobufs:
629  _leave(" = -ENOBUFS");
630  return -ENOBUFS;
631 }
633 
634 /*
635  * release a write op reference
636  */
637 static void fscache_release_write_op(struct fscache_operation *_op)
638 {
639  _enter("{OP%x}", _op->debug_id);
640 }
641 
642 /*
643  * perform the background storage of a page into the cache
644  */
645 static void fscache_write_op(struct fscache_operation *_op)
646 {
647  struct fscache_storage *op =
648  container_of(_op, struct fscache_storage, op);
649  struct fscache_object *object = op->op.object;
650  struct fscache_cookie *cookie;
651  struct page *page;
652  unsigned n;
653  void *results[1];
654  int ret;
655 
656  _enter("{OP%x,%d}", op->op.debug_id, atomic_read(&op->op.usage));
657 
658  spin_lock(&object->lock);
659  cookie = object->cookie;
660 
661  if (!fscache_object_is_active(object) || !cookie) {
662  spin_unlock(&object->lock);
663  _leave("");
664  return;
665  }
666 
667  spin_lock(&cookie->stores_lock);
668 
670 
671  /* find a page to store */
672  page = NULL;
673  n = radix_tree_gang_lookup_tag(&cookie->stores, results, 0, 1,
675  if (n != 1)
676  goto superseded;
677  page = results[0];
678  _debug("gang %d [%lx]", n, page->index);
679  if (page->index > op->store_limit) {
681  goto superseded;
682  }
683 
684  radix_tree_tag_set(&cookie->stores, page->index,
686  radix_tree_tag_clear(&cookie->stores, page->index,
688 
689  spin_unlock(&cookie->stores_lock);
690  spin_unlock(&object->lock);
691 
694  ret = object->cache->ops->write_page(op, page);
696  fscache_end_page_write(object, page);
697  if (ret < 0) {
698  fscache_abort_object(object);
699  } else {
701  }
702 
703  _leave("");
704  return;
705 
706 superseded:
707  /* this writer is going away and there aren't any more things to
708  * write */
709  _debug("cease");
710  spin_unlock(&cookie->stores_lock);
712  spin_unlock(&object->lock);
713  _leave("");
714 }
715 
716 /*
717  * request a page be stored in the cache
718  * - returns:
719  * -ENOMEM - out of memory, nothing done
720  * -ENOBUFS - no backing object available in which to cache the page
721  * 0 - dispatched a write - it'll call end_io_func() when finished
722  *
723  * if the cookie still has a backing object at this point, that object can be
724  * in one of a few states with respect to storage processing:
725  *
726  * (1) negative lookup, object not yet created (FSCACHE_COOKIE_CREATING is
727  * set)
728  *
729  * (a) no writes yet (set FSCACHE_COOKIE_PENDING_FILL and queue deferred
730  * fill op)
731  *
732  * (b) writes deferred till post-creation (mark page for writing and
733  * return immediately)
734  *
735  * (2) negative lookup, object created, initial fill being made from netfs
736  * (FSCACHE_COOKIE_INITIAL_FILL is set)
737  *
738  * (a) fill point not yet reached this page (mark page for writing and
739  * return)
740  *
741  * (b) fill point passed this page (queue op to store this page)
742  *
743  * (3) object extant (queue op to store this page)
744  *
745  * any other state is invalid
746  */
748  struct page *page,
749  gfp_t gfp)
750 {
751  struct fscache_storage *op;
752  struct fscache_object *object;
753  int ret;
754 
755  _enter("%p,%x,", cookie, (u32) page->flags);
756 
757  ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
758  ASSERT(PageFsCache(page));
759 
761 
762  op = kzalloc(sizeof(*op), GFP_NOIO);
763  if (!op)
764  goto nomem;
765 
766  fscache_operation_init(&op->op, fscache_write_op,
767  fscache_release_write_op);
768  op->op.flags = FSCACHE_OP_ASYNC | (1 << FSCACHE_OP_WAITING);
769 
770  ret = radix_tree_preload(gfp & ~__GFP_HIGHMEM);
771  if (ret < 0)
772  goto nomem_free;
773 
774  ret = -ENOBUFS;
775  spin_lock(&cookie->lock);
776 
777  if (hlist_empty(&cookie->backing_objects))
778  goto nobufs;
779  object = hlist_entry(cookie->backing_objects.first,
780  struct fscache_object, cookie_link);
781  if (test_bit(FSCACHE_IOERROR, &object->cache->flags))
782  goto nobufs;
783 
784  /* add the page to the pending-storage radix tree on the backing
785  * object */
786  spin_lock(&object->lock);
787  spin_lock(&cookie->stores_lock);
788 
789  _debug("store limit %llx", (unsigned long long) object->store_limit);
790 
791  ret = radix_tree_insert(&cookie->stores, page->index, page);
792  if (ret < 0) {
793  if (ret == -EEXIST)
794  goto already_queued;
795  _debug("insert failed %d", ret);
796  goto nobufs_unlock_obj;
797  }
798 
799  radix_tree_tag_set(&cookie->stores, page->index,
801  page_cache_get(page);
802 
803  /* we only want one writer at a time, but we do need to queue new
804  * writers after exclusive ops */
806  goto already_pending;
807 
808  spin_unlock(&cookie->stores_lock);
809  spin_unlock(&object->lock);
810 
811  op->op.debug_id = atomic_inc_return(&fscache_op_debug_id);
812  op->store_limit = object->store_limit;
813 
814  if (fscache_submit_op(object, &op->op) < 0)
815  goto submit_failed;
816 
817  spin_unlock(&cookie->lock);
818  radix_tree_preload_end();
821 
822  /* the work queue now carries its own ref on the object */
824  _leave(" = 0");
825  return 0;
826 
827 already_queued:
829 already_pending:
830  spin_unlock(&cookie->stores_lock);
831  spin_unlock(&object->lock);
832  spin_unlock(&cookie->lock);
833  radix_tree_preload_end();
834  kfree(op);
836  _leave(" = 0");
837  return 0;
838 
839 submit_failed:
840  spin_lock(&cookie->stores_lock);
841  radix_tree_delete(&cookie->stores, page->index);
842  spin_unlock(&cookie->stores_lock);
843  page_cache_release(page);
844  ret = -ENOBUFS;
845  goto nobufs;
846 
847 nobufs_unlock_obj:
848  spin_unlock(&cookie->stores_lock);
849  spin_unlock(&object->lock);
850 nobufs:
851  spin_unlock(&cookie->lock);
852  radix_tree_preload_end();
853  kfree(op);
855  _leave(" = -ENOBUFS");
856  return -ENOBUFS;
857 
858 nomem_free:
859  kfree(op);
860 nomem:
862  _leave(" = -ENOMEM");
863  return -ENOMEM;
864 }
866 
867 /*
868  * remove a page from the cache
869  */
870 void __fscache_uncache_page(struct fscache_cookie *cookie, struct page *page)
871 {
872  struct fscache_object *object;
873 
874  _enter(",%p", page);
875 
876  ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
877  ASSERTCMP(page, !=, NULL);
878 
880 
881  /* cache withdrawal may beat us to it */
882  if (!PageFsCache(page))
883  goto done;
884 
885  /* get the object */
886  spin_lock(&cookie->lock);
887 
888  if (hlist_empty(&cookie->backing_objects)) {
889  ClearPageFsCache(page);
890  goto done_unlock;
891  }
892 
893  object = hlist_entry(cookie->backing_objects.first,
894  struct fscache_object, cookie_link);
895 
896  /* there might now be stuff on disk we could read */
898 
899  /* only invoke the cache backend if we managed to mark the page
900  * uncached here; this deals with synchronisation vs withdrawal */
901  if (TestClearPageFsCache(page) &&
902  object->cache->ops->uncache_page) {
903  /* the cache backend releases the cookie lock */
905  object->cache->ops->uncache_page(object, page);
907  goto done;
908  }
909 
910 done_unlock:
911  spin_unlock(&cookie->lock);
912 done:
913  _leave("");
914 }
916 
926  struct pagevec *pagevec)
927 {
928  struct fscache_cookie *cookie = op->op.object->cookie;
929  unsigned long loop;
930 
931 #ifdef CONFIG_FSCACHE_STATS
932  atomic_add(pagevec->nr, &fscache_n_marks);
933 #endif
934 
935  for (loop = 0; loop < pagevec->nr; loop++) {
936  struct page *page = pagevec->pages[loop];
937 
938  _debug("- mark %p{%lx}", page, page->index);
939  if (TestSetPageFsCache(page)) {
940  static bool once_only;
941  if (!once_only) {
942  once_only = true;
943  printk(KERN_WARNING "FS-Cache:"
944  " Cookie type %s marked page %lx"
945  " multiple times\n",
946  cookie->def->name, page->index);
947  }
948  }
949  }
950 
951  if (cookie->def->mark_pages_cached)
952  cookie->def->mark_pages_cached(cookie->netfs_data,
953  op->mapping, pagevec);
954  pagevec_reinit(pagevec);
955 }
957 
958 /*
959  * Uncache all the pages in an inode that are marked PG_fscache, assuming them
960  * to be associated with the given cookie.
961  */
963  struct inode *inode)
964 {
965  struct address_space *mapping = inode->i_mapping;
966  struct pagevec pvec;
967  pgoff_t next;
968  int i;
969 
970  _enter("%p,%p", cookie, inode);
971 
972  if (!mapping || mapping->nrpages == 0) {
973  _leave(" [no pages]");
974  return;
975  }
976 
977  pagevec_init(&pvec, 0);
978  next = 0;
979  do {
980  if (!pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE))
981  break;
982  for (i = 0; i < pagevec_count(&pvec); i++) {
983  struct page *page = pvec.pages[i];
984  next = page->index;
985  if (PageFsCache(page)) {
986  __fscache_wait_on_page_write(cookie, page);
987  __fscache_uncache_page(cookie, page);
988  }
989  }
990  pagevec_release(&pvec);
991  cond_resched();
992  } while (++next);
993 
994  _leave("");
995 }