Lines Matching refs:object

19  * Allocate a cache object record.
26 struct cachefiles_object *object;
30 object = kmem_cache_zalloc(cachefiles_object_jar, GFP_KERNEL);
31 if (!object)
34 if (cachefiles_ondemand_init_obj_info(object, volume)) {
35 kmem_cache_free(cachefiles_object_jar, object);
39 refcount_set(&object->ref, 1);
41 spin_lock_init(&object->lock);
42 INIT_LIST_HEAD(&object->cache_link);
43 object->volume = volume;
44 object->debug_id = atomic_inc_return(&cachefiles_object_debug_id);
45 object->cookie = fscache_get_cookie(cookie, fscache_cookie_get_attach_object);
48 trace_cachefiles_ref(object->debug_id, cookie->debug_id, 1,
50 return object;
54 * Note that an object has been seen.
56 void cachefiles_see_object(struct cachefiles_object *object,
59 trace_cachefiles_ref(object->debug_id, object->cookie->debug_id,
60 refcount_read(&object->ref), why);
64 * Increment the usage count on an object;
66 struct cachefiles_object *cachefiles_grab_object(struct cachefiles_object *object,
71 __refcount_inc(&object->ref, &r);
72 trace_cachefiles_ref(object->debug_id, object->cookie->debug_id, r, why);
73 return object;
77 * dispose of a reference to an object
79 void cachefiles_put_object(struct cachefiles_object *object,
82 unsigned int object_debug_id = object->debug_id;
83 unsigned int cookie_debug_id = object->cookie->debug_id;
88 done = __refcount_dec_and_test(&object->ref, &r);
91 _debug("- kill object OBJ%x", object_debug_id);
93 ASSERTCMP(object->file, ==, NULL);
95 kfree(object->d_name);
96 cachefiles_ondemand_deinit_obj_info(object);
97 cache = object->volume->cache->cache;
98 fscache_put_cookie(object->cookie, fscache_cookie_put_object);
99 object->cookie = NULL;
100 kmem_cache_free(cachefiles_object_jar, object);
114 static int cachefiles_adjust_size(struct cachefiles_object *object)
117 struct file *file = object->file;
122 ni_size = object->cookie->object_size;
126 object->debug_id, (unsigned long long) ni_size);
166 cachefiles_io_error_obj(object, "Size set failed");
179 struct cachefiles_object *object;
184 object = cachefiles_alloc_object(cookie);
185 if (!object)
188 _enter("{OBJ%x}", object->debug_id);
190 if (!cachefiles_cook_key(object))
193 cookie->cache_priv = object;
197 success = cachefiles_look_up_object(object);
201 cachefiles_see_object(object, cachefiles_obj_see_lookup_cookie);
204 list_add(&object->cache_link, &cache->object_list);
206 cachefiles_adjust_size(object);
214 cachefiles_see_object(object, cachefiles_obj_see_lookup_failed);
216 _debug("failed c=%08x o=%08x", cookie->debug_id, object->debug_id);
218 * drop it before we can withdraw the object.
223 cachefiles_put_object(object, cachefiles_obj_put_alloc_fail);
229 * Shorten the backing object to discard any dirty data and free up
232 static bool cachefiles_shorten_object(struct cachefiles_object *object,
235 struct cachefiles_cache *cache = object->volume->cache;
243 trace_cachefiles_trunc(object, inode, i_size, dio_size,
249 trace_cachefiles_io_error(object, file_inode(file), ret,
251 cachefiles_io_error_obj(object, "Trunc-to-size failed %d", ret);
252 cachefiles_remove_object_xattr(cache, object, file->f_path.dentry);
257 trace_cachefiles_trunc(object, inode, dio_size, new_size,
264 trace_cachefiles_io_error(object, file_inode(file), ret,
266 cachefiles_io_error_obj(object, "Trunc-to-dio-size failed %d", ret);
267 cachefiles_remove_object_xattr(cache, object, file->f_path.dentry);
276 * Resize the backing object.
281 struct cachefiles_object *object = cachefiles_cres_object(cres);
282 struct cachefiles_cache *cache = object->volume->cache;
283 struct fscache_cookie *cookie = object->cookie;
292 cachefiles_shorten_object(object, file, new_size);
294 object->cookie->object_size = new_size;
306 * Commit changes to the object as we drop it.
308 static void cachefiles_commit_object(struct cachefiles_object *object,
313 if (test_and_clear_bit(FSCACHE_COOKIE_LOCAL_WRITE, &object->cookie->flags))
315 if (test_and_clear_bit(FSCACHE_COOKIE_NEEDS_UPDATE, &object->cookie->flags))
318 cachefiles_set_object_xattr(object);
320 if (test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags))
321 cachefiles_commit_tmpfile(cache, object);
325 * Finalise and object and close the VFS structs that we have.
327 static void cachefiles_clean_up_object(struct cachefiles_object *object,
330 if (test_bit(FSCACHE_COOKIE_RETIRED, &object->cookie->flags)) {
331 if (!test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags)) {
332 cachefiles_see_object(object, cachefiles_obj_see_clean_delete);
333 _debug("- inval object OBJ%x", object->debug_id);
334 cachefiles_delete_object(object, FSCACHE_OBJECT_WAS_RETIRED);
336 cachefiles_see_object(object, cachefiles_obj_see_clean_drop_tmp);
337 _debug("- inval object OBJ%x tmpfile", object->debug_id);
340 cachefiles_see_object(object, cachefiles_obj_see_clean_commit);
341 cachefiles_commit_object(object, cache);
344 cachefiles_unmark_inode_in_use(object, object->file);
345 if (object->file) {
346 fput(object->file);
347 object->file = NULL;
356 struct cachefiles_object *object = cookie->cache_priv;
357 struct cachefiles_cache *cache = object->volume->cache;
360 _enter("o=%x", object->debug_id);
361 cachefiles_see_object(object, cachefiles_obj_see_withdraw_cookie);
363 if (!list_empty(&object->cache_link)) {
365 cachefiles_see_object(object, cachefiles_obj_see_withdrawal);
366 list_del_init(&object->cache_link);
370 cachefiles_ondemand_clean_object(object);
372 if (object->file) {
374 cachefiles_clean_up_object(object, cache);
379 cachefiles_put_object(object, cachefiles_obj_put_detach);
387 struct cachefiles_object *object = cookie->cache_priv;
391 _enter("o=%x,[%llu]", object->debug_id, object->cookie->object_size);
393 old_tmpfile = test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags);
395 if (!object->file) {
401 new_file = cachefiles_create_tmpfile(object);
407 spin_lock(&object->lock);
409 old_file = object->file;
410 object->file = new_file;
411 object->content_info = CACHEFILES_CONTENT_NO_DATA;
412 set_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags);
413 set_bit(FSCACHE_COOKIE_NEEDS_UPDATE, &object->cookie->flags);
415 spin_unlock(&object->lock);
423 struct cachefiles_volume *volume = object->volume;
427 cachefiles_bury_object(volume->cache, object, fan,