Lines Matching refs:cache
99 static void cachefiles_mark_object_buried(struct cachefiles_cache *cache, in cachefiles_mark_object_buried() argument
107 write_lock(&cache->active_lock); in cachefiles_mark_object_buried()
109 p = cache->active_nodes.rb_node; in cachefiles_mark_object_buried()
120 write_unlock(&cache->active_lock); in cachefiles_mark_object_buried()
139 write_unlock(&cache->active_lock); in cachefiles_mark_object_buried()
146 static int cachefiles_mark_object_active(struct cachefiles_cache *cache, in cachefiles_mark_object_active() argument
156 write_lock(&cache->active_lock); in cachefiles_mark_object_active()
165 _p = &cache->active_nodes.rb_node; in cachefiles_mark_object_active()
182 rb_insert_color(&object->active_node, &cache->active_nodes); in cachefiles_mark_object_active()
184 write_unlock(&cache->active_lock); in cachefiles_mark_object_active()
198 write_unlock(&cache->active_lock); in cachefiles_mark_object_active()
248 cache->cache.ops->put_object(&xobject->fscache); in cachefiles_mark_object_active()
253 cache->cache.ops->put_object(&xobject->fscache); in cachefiles_mark_object_active()
265 static int cachefiles_bury_object(struct cachefiles_cache *cache, in cachefiles_bury_object() argument
283 path.mnt = cache->mnt; in cachefiles_bury_object()
287 cachefiles_io_error(cache, "Unlink security error"); in cachefiles_bury_object()
292 cachefiles_mark_object_buried(cache, rep); in cachefiles_bury_object()
298 cachefiles_io_error(cache, "Unlink failed"); in cachefiles_bury_object()
312 (uint32_t) atomic_inc_return(&cache->gravecounter)); in cachefiles_bury_object()
315 trap = lock_rename(cache->graveyard, dir); in cachefiles_bury_object()
321 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
326 if (!d_can_lookup(cache->graveyard)) { in cachefiles_bury_object()
327 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
328 cachefiles_io_error(cache, "Graveyard no longer a directory"); in cachefiles_bury_object()
333 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
334 cachefiles_io_error(cache, "May not make directory loop"); in cachefiles_bury_object()
339 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
340 cachefiles_io_error(cache, "Mountpoint in cache"); in cachefiles_bury_object()
344 grave = lookup_one_len(nbuffer, cache->graveyard, strlen(nbuffer)); in cachefiles_bury_object()
346 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
353 cachefiles_io_error(cache, "Lookup error %ld", in cachefiles_bury_object()
359 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
367 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
369 cachefiles_io_error(cache, "Mountpoint in graveyard"); in cachefiles_bury_object()
375 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
377 cachefiles_io_error(cache, "May not make directory loop"); in cachefiles_bury_object()
382 path.mnt = cache->mnt; in cachefiles_bury_object()
384 path_to_graveyard.mnt = cache->mnt; in cachefiles_bury_object()
385 path_to_graveyard.dentry = cache->graveyard; in cachefiles_bury_object()
388 cachefiles_io_error(cache, "Rename security error %d", ret); in cachefiles_bury_object()
391 d_inode(cache->graveyard), grave, NULL, 0); in cachefiles_bury_object()
393 cachefiles_io_error(cache, in cachefiles_bury_object()
397 cachefiles_mark_object_buried(cache, rep); in cachefiles_bury_object()
400 unlock_rename(cache->graveyard, dir); in cachefiles_bury_object()
409 int cachefiles_delete_object(struct cachefiles_cache *cache, in cachefiles_delete_object() argument
435 ret = cachefiles_bury_object(cache, dir, in cachefiles_delete_object()
460 struct cachefiles_cache *cache; in cachefiles_walk_to_object() local
471 cache = container_of(parent->fscache.cache, in cachefiles_walk_to_object()
472 struct cachefiles_cache, cache); in cachefiles_walk_to_object()
473 path.mnt = cache->mnt; in cachefiles_walk_to_object()
523 ret = cachefiles_has_space(cache, 1, 0); in cachefiles_walk_to_object()
552 ret = cachefiles_has_space(cache, 1, 0); in cachefiles_walk_to_object()
605 ret = cachefiles_bury_object(cache, dir, next, true); in cachefiles_walk_to_object()
618 ret = cachefiles_mark_object_active(cache, object); in cachefiles_walk_to_object()
668 cachefiles_io_error(cache, "Create/mkdir failed"); in cachefiles_walk_to_object()
677 write_lock(&cache->active_lock); in cachefiles_walk_to_object()
678 rb_erase(&object->active_node, &cache->active_nodes); in cachefiles_walk_to_object()
681 write_unlock(&cache->active_lock); in cachefiles_walk_to_object()
695 cachefiles_io_error(cache, "Lookup failed"); in cachefiles_walk_to_object()
710 struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache, in cachefiles_get_directory() argument
738 ret = cachefiles_has_space(cache, 1, 0); in cachefiles_get_directory()
744 path.mnt = cache->mnt; in cachefiles_get_directory()
816 static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache, in cachefiles_check_active() argument
852 read_lock(&cache->active_lock); in cachefiles_check_active()
854 _n = cache->active_nodes.rb_node; in cachefiles_check_active()
867 read_unlock(&cache->active_lock); in cachefiles_check_active()
873 read_unlock(&cache->active_lock); in cachefiles_check_active()
889 cachefiles_io_error(cache, "Lookup failed"); in cachefiles_check_active()
903 int cachefiles_cull(struct cachefiles_cache *cache, struct dentry *dir, in cachefiles_cull() argument
911 victim = cachefiles_check_active(cache, dir, filename); in cachefiles_cull()
923 ret = cachefiles_remove_object_xattr(cache, victim); in cachefiles_cull()
930 ret = cachefiles_bury_object(cache, dir, victim, false); in cachefiles_cull()
962 int cachefiles_check_in_use(struct cachefiles_cache *cache, struct dentry *dir, in cachefiles_check_in_use() argument
970 victim = cachefiles_check_active(cache, dir, filename); in cachefiles_check_in_use()