Lines Matching refs:cookie
19 bool __fscache_check_page_write(struct fscache_cookie *cookie, struct page *page)
24 val = radix_tree_lookup(&cookie->stores, page->index);
26 trace_fscache_check_page(cookie, page, val, 0);
35 void __fscache_wait_on_page_write(struct fscache_cookie *cookie, struct page *page)
37 wait_queue_head_t *wq = bit_waitqueue(&cookie->flags, 0);
39 trace_fscache_page(cookie, page, fscache_page_write_wait);
41 wait_event(*wq, !__fscache_check_page_write(cookie, page));
50 bool release_page_wait_timeout(struct fscache_cookie *cookie, struct page *page)
52 wait_queue_head_t *wq = bit_waitqueue(&cookie->flags, 0);
54 return wait_event_timeout(*wq, !__fscache_check_page_write(cookie, page),
62 bool __fscache_maybe_release_page(struct fscache_cookie *cookie,
69 _enter("%p,%p,%x", cookie, page, gfp);
71 trace_fscache_page(cookie, page, fscache_page_maybe_release);
75 val = radix_tree_lookup(&cookie->stores, page->index);
79 __fscache_uncache_page(cookie, page);
85 if (radix_tree_tag_get(&cookie->stores, page->index,
93 spin_lock(&cookie->stores_lock);
96 if (radix_tree_tag_get(&cookie->stores, page->index,
100 spin_unlock(&cookie->stores_lock);
104 xpage = radix_tree_delete(&cookie->stores, page->index);
105 trace_fscache_page(cookie, page, fscache_page_radix_delete);
106 spin_unlock(&cookie->stores_lock);
116 wake_up_bit(&cookie->flags, 0);
117 trace_fscache_wake_cookie(cookie);
120 __fscache_uncache_page(cookie, page);
134 if (!release_page_wait_timeout(cookie, page))
149 struct fscache_cookie *cookie;
153 cookie = object->cookie;
154 if (cookie) {
157 spin_lock(&cookie->stores_lock);
158 radix_tree_tag_clear(&cookie->stores, page->index,
160 trace_fscache_page(cookie, page, fscache_page_radix_clear_store);
161 if (!radix_tree_tag_get(&cookie->stores, page->index,
164 xpage = radix_tree_delete(&cookie->stores, page->index);
165 trace_fscache_page(cookie, page, fscache_page_radix_delete);
166 trace_fscache_page(cookie, page, fscache_page_write_end);
168 val = radix_tree_lookup(&cookie->stores, page->index);
169 trace_fscache_check_page(cookie, page, val, 1);
171 trace_fscache_page(cookie, page, fscache_page_write_end_pend);
173 spin_unlock(&cookie->stores_lock);
174 wake_up_bit(&cookie->flags, 0);
175 trace_fscache_wake_cookie(cookie);
177 trace_fscache_page(cookie, page, fscache_page_write_end_noc);
213 int __fscache_attr_changed(struct fscache_cookie *cookie)
219 _enter("%p", cookie);
221 ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
232 fscache_operation_init(cookie, op, fscache_attr_changed_op, NULL, NULL);
233 trace_fscache_page_op(cookie, NULL, op, fscache_page_op_attr_changed);
238 spin_lock(&cookie->lock);
240 if (!fscache_cookie_enabled(cookie) ||
241 hlist_empty(&cookie->backing_objects))
243 object = hlist_entry(cookie->backing_objects.first,
246 __fscache_use_cookie(cookie);
249 spin_unlock(&cookie->lock);
256 wake_cookie = __fscache_unuse_cookie(cookie);
258 spin_unlock(&cookie->lock);
261 __fscache_wake_unused_cookie(cookie);
294 fscache_put_context(op->cookie, op->context);
303 struct fscache_cookie *cookie,
317 fscache_operation_init(cookie, &op->op, NULL,
323 op->cookie = cookie;
334 fscache_get_context(op->cookie, context);
341 int fscache_wait_for_deferred_lookup(struct fscache_cookie *cookie)
347 if (!test_bit(FSCACHE_COOKIE_LOOKING_UP, &cookie->flags)) {
355 if (wait_on_bit(&cookie->flags, FSCACHE_COOKIE_LOOKING_UP,
362 ASSERT(!test_bit(FSCACHE_COOKIE_LOOKING_UP, &cookie->flags));
388 trace_fscache_op(object->cookie, op, fscache_op_signal);
410 trace_fscache_op(object->cookie, op, fscache_op_signal);
429 int __fscache_read_or_alloc_page(struct fscache_cookie *cookie,
440 _enter("%p,%p,,,", cookie, page);
444 if (hlist_empty(&cookie->backing_objects))
447 if (test_bit(FSCACHE_COOKIE_INVALIDATING, &cookie->flags)) {
452 ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
455 if (fscache_wait_for_deferred_lookup(cookie) < 0)
458 op = fscache_alloc_retrieval(cookie, page->mapping,
465 trace_fscache_page_op(cookie, page, &op->op, fscache_page_op_retr_one);
467 spin_lock(&cookie->lock);
469 if (!fscache_cookie_enabled(cookie) ||
470 hlist_empty(&cookie->backing_objects))
472 object = hlist_entry(cookie->backing_objects.first,
477 __fscache_use_cookie(cookie);
483 spin_unlock(&cookie->lock);
497 if (test_bit(FSCACHE_COOKIE_NO_DATA_YET, &object->cookie->flags)) {
527 wake_cookie = __fscache_unuse_cookie(cookie);
529 spin_unlock(&cookie->lock);
531 __fscache_wake_unused_cookie(cookie);
558 int __fscache_read_or_alloc_pages(struct fscache_cookie *cookie,
571 _enter("%p,,%d,,,", cookie, *nr_pages);
575 if (hlist_empty(&cookie->backing_objects))
578 if (test_bit(FSCACHE_COOKIE_INVALIDATING, &cookie->flags)) {
583 ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
587 if (fscache_wait_for_deferred_lookup(cookie) < 0)
590 op = fscache_alloc_retrieval(cookie, mapping, end_io_func, context);
594 trace_fscache_page_op(cookie, NULL, &op->op, fscache_page_op_retr_multi);
596 spin_lock(&cookie->lock);
598 if (!fscache_cookie_enabled(cookie) ||
599 hlist_empty(&cookie->backing_objects))
601 object = hlist_entry(cookie->backing_objects.first,
604 __fscache_use_cookie(cookie);
610 spin_unlock(&cookie->lock);
624 if (test_bit(FSCACHE_COOKIE_NO_DATA_YET, &object->cookie->flags)) {
654 wake_cookie = __fscache_unuse_cookie(cookie);
656 spin_unlock(&cookie->lock);
659 __fscache_wake_unused_cookie(cookie);
675 int __fscache_alloc_page(struct fscache_cookie *cookie,
684 _enter("%p,%p,,,", cookie, page);
688 if (hlist_empty(&cookie->backing_objects))
691 ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
694 if (test_bit(FSCACHE_COOKIE_INVALIDATING, &cookie->flags)) {
699 if (fscache_wait_for_deferred_lookup(cookie) < 0)
702 op = fscache_alloc_retrieval(cookie, page->mapping, NULL, NULL);
706 trace_fscache_page_op(cookie, page, &op->op, fscache_page_op_alloc_one);
708 spin_lock(&cookie->lock);
710 if (!fscache_cookie_enabled(cookie) ||
711 hlist_empty(&cookie->backing_objects))
713 object = hlist_entry(cookie->backing_objects.first,
716 __fscache_use_cookie(cookie);
719 spin_unlock(&cookie->lock);
748 wake_cookie = __fscache_unuse_cookie(cookie);
750 spin_unlock(&cookie->lock);
753 __fscache_wake_unused_cookie(cookie);
765 void __fscache_readpages_cancel(struct fscache_cookie *cookie,
772 __fscache_uncache_page(cookie, page);
793 struct fscache_cookie *cookie;
803 cookie = object->cookie;
816 if (!cookie) {
817 /* If we get here, then the cookie belonging to the object was
818 * detached, probably by the cookie being withdrawn due to
831 spin_lock(&cookie->stores_lock);
838 n = radix_tree_gang_lookup_tag(&cookie->stores, results, 0, 1,
840 trace_fscache_gang_lookup(cookie, &op->op, results, n, op->store_limit);
846 radix_tree_tag_set(&cookie->stores, page->index,
848 radix_tree_tag_clear(&cookie->stores, page->index,
850 trace_fscache_page(cookie, page, fscache_page_radix_pend2store);
852 spin_unlock(&cookie->stores_lock);
862 trace_fscache_wrote_page(cookie, page, &op->op, ret);
876 trace_fscache_wrote_page(cookie, page, &op->op, -ENOBUFS);
884 spin_unlock(&cookie->stores_lock);
894 void fscache_invalidate_writes(struct fscache_cookie *cookie)
903 spin_lock(&cookie->stores_lock);
904 n = radix_tree_gang_lookup_tag(&cookie->stores, results, 0,
908 spin_unlock(&cookie->stores_lock);
914 radix_tree_delete(&cookie->stores, page->index);
915 trace_fscache_page(cookie, page, fscache_page_radix_delete);
916 trace_fscache_page(cookie, page, fscache_page_inval);
919 spin_unlock(&cookie->stores_lock);
925 wake_up_bit(&cookie->flags, 0);
926 trace_fscache_wake_cookie(cookie);
938 * if the cookie still has a backing object at this point, that object can be
960 int __fscache_write_page(struct fscache_cookie *cookie,
970 _enter("%p,%x,", cookie, (u32) page->flags);
972 ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
977 if (test_bit(FSCACHE_COOKIE_INVALIDATING, &cookie->flags)) {
986 fscache_operation_init(cookie, &op->op, fscache_write_op, NULL,
996 trace_fscache_page_op(cookie, page, &op->op, fscache_page_op_write_one);
999 spin_lock(&cookie->lock);
1001 if (!fscache_cookie_enabled(cookie) ||
1002 hlist_empty(&cookie->backing_objects))
1004 object = hlist_entry(cookie->backing_objects.first,
1009 trace_fscache_page(cookie, page, fscache_page_write);
1018 spin_lock(&cookie->stores_lock);
1022 ret = radix_tree_insert(&cookie->stores, page->index, page);
1030 trace_fscache_page(cookie, page, fscache_page_radix_insert);
1031 radix_tree_tag_set(&cookie->stores, page->index,
1033 trace_fscache_page(cookie, page, fscache_page_radix_set_pend);
1041 spin_unlock(&cookie->stores_lock);
1047 __fscache_use_cookie(cookie);
1051 spin_unlock(&cookie->lock);
1064 spin_unlock(&cookie->stores_lock);
1066 spin_unlock(&cookie->lock);
1074 spin_lock(&cookie->stores_lock);
1075 radix_tree_delete(&cookie->stores, page->index);
1076 trace_fscache_page(cookie, page, fscache_page_radix_delete);
1077 spin_unlock(&cookie->stores_lock);
1078 wake_cookie = __fscache_unuse_cookie(cookie);
1084 spin_unlock(&cookie->stores_lock);
1087 spin_unlock(&cookie->lock);
1091 __fscache_wake_unused_cookie(cookie);
1108 void __fscache_uncache_page(struct fscache_cookie *cookie, struct page *page)
1114 ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
1123 trace_fscache_page(cookie, page, fscache_page_uncache);
1126 spin_lock(&cookie->lock);
1128 if (hlist_empty(&cookie->backing_objects)) {
1133 object = hlist_entry(cookie->backing_objects.first,
1137 clear_bit(FSCACHE_COOKIE_NO_DATA_YET, &cookie->flags);
1143 /* the cache backend releases the cookie lock */
1151 spin_unlock(&cookie->lock);
1167 struct fscache_cookie *cookie = op->op.object->cookie;
1173 trace_fscache_page(cookie, page, fscache_page_cached);
1181 cookie->def->name, page->index);
1185 if (cookie->def->mark_page_cached)
1186 cookie->def->mark_page_cached(cookie->netfs_data,
1213 * to be associated with the given cookie.
1215 void __fscache_uncache_all_inode_pages(struct fscache_cookie *cookie,
1223 _enter("%p,%p", cookie, inode);
1238 __fscache_wait_on_page_write(cookie, page);
1239 __fscache_uncache_page(cookie, page);