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 refcount_set(&object->ref, 1);
36 spin_lock_init(&object->lock);
37 INIT_LIST_HEAD(&object->cache_link);
38 object->volume = volume;
39 object->debug_id = atomic_inc_return(&cachefiles_object_debug_id);
40 object->cookie = fscache_get_cookie(cookie, fscache_cookie_get_attach_object);
43 trace_cachefiles_ref(object->debug_id, cookie->debug_id, 1,
45 return object;
49 * Note that an object has been seen.
51 void cachefiles_see_object(struct cachefiles_object *object,
54 trace_cachefiles_ref(object->debug_id, object->cookie->debug_id,
55 refcount_read(&object->ref), why);
59 * Increment the usage count on an object;
61 struct cachefiles_object *cachefiles_grab_object(struct cachefiles_object *object,
66 __refcount_inc(&object->ref, &r);
67 trace_cachefiles_ref(object->debug_id, object->cookie->debug_id, r, why);
68 return object;
72 * dispose of a reference to an object
74 void cachefiles_put_object(struct cachefiles_object *object,
77 unsigned int object_debug_id = object->debug_id;
78 unsigned int cookie_debug_id = object->cookie->debug_id;
83 done = __refcount_dec_and_test(&object->ref, &r);
86 _debug("- kill object OBJ%x", object_debug_id);
88 ASSERTCMP(object->file, ==, NULL);
90 kfree(object->d_name);
92 cache = object->volume->cache->cache;
93 fscache_put_cookie(object->cookie, fscache_cookie_put_object);
94 object->cookie = NULL;
95 kmem_cache_free(cachefiles_object_jar, object);
109 static int cachefiles_adjust_size(struct cachefiles_object *object)
112 struct file *file = object->file;
117 ni_size = object->cookie->object_size;
121 object->debug_id, (unsigned long long) ni_size);
161 cachefiles_io_error_obj(object, "Size set failed");
174 struct cachefiles_object *object;
179 object = cachefiles_alloc_object(cookie);
180 if (!object)
183 _enter("{OBJ%x}", object->debug_id);
185 if (!cachefiles_cook_key(object))
188 cookie->cache_priv = object;
192 success = cachefiles_look_up_object(object);
196 cachefiles_see_object(object, cachefiles_obj_see_lookup_cookie);
199 list_add(&object->cache_link, &cache->object_list);
201 cachefiles_adjust_size(object);
209 cachefiles_see_object(object, cachefiles_obj_see_lookup_failed);
211 _debug("failed c=%08x o=%08x", cookie->debug_id, object->debug_id);
213 * drop it before we can withdraw the object.
218 cachefiles_put_object(object, cachefiles_obj_put_alloc_fail);
224 * Shorten the backing object to discard any dirty data and free up
227 static bool cachefiles_shorten_object(struct cachefiles_object *object,
230 struct cachefiles_cache *cache = object->volume->cache;
238 trace_cachefiles_trunc(object, inode, i_size, dio_size,
244 trace_cachefiles_io_error(object, file_inode(file), ret,
246 cachefiles_io_error_obj(object, "Trunc-to-size failed %d", ret);
247 cachefiles_remove_object_xattr(cache, object, file->f_path.dentry);
252 trace_cachefiles_trunc(object, inode, dio_size, new_size,
259 trace_cachefiles_io_error(object, file_inode(file), ret,
261 cachefiles_io_error_obj(object, "Trunc-to-dio-size failed %d", ret);
262 cachefiles_remove_object_xattr(cache, object, file->f_path.dentry);
271 * Resize the backing object.
276 struct cachefiles_object *object = cachefiles_cres_object(cres);
277 struct cachefiles_cache *cache = object->volume->cache;
278 struct fscache_cookie *cookie = object->cookie;
287 cachefiles_shorten_object(object, file, new_size);
289 object->cookie->object_size = new_size;
301 * Commit changes to the object as we drop it.
303 static void cachefiles_commit_object(struct cachefiles_object *object,
308 if (test_and_clear_bit(FSCACHE_COOKIE_LOCAL_WRITE, &object->cookie->flags))
310 if (test_and_clear_bit(FSCACHE_COOKIE_NEEDS_UPDATE, &object->cookie->flags))
313 cachefiles_set_object_xattr(object);
315 if (test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags))
316 cachefiles_commit_tmpfile(cache, object);
320 * Finalise and object and close the VFS structs that we have.
322 static void cachefiles_clean_up_object(struct cachefiles_object *object,
325 if (test_bit(FSCACHE_COOKIE_RETIRED, &object->cookie->flags)) {
326 if (!test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags)) {
327 cachefiles_see_object(object, cachefiles_obj_see_clean_delete);
328 _debug("- inval object OBJ%x", object->debug_id);
329 cachefiles_delete_object(object, FSCACHE_OBJECT_WAS_RETIRED);
331 cachefiles_see_object(object, cachefiles_obj_see_clean_drop_tmp);
332 _debug("- inval object OBJ%x tmpfile", object->debug_id);
335 cachefiles_see_object(object, cachefiles_obj_see_clean_commit);
336 cachefiles_commit_object(object, cache);
339 cachefiles_unmark_inode_in_use(object, object->file);
340 if (object->file) {
341 fput(object->file);
342 object->file = NULL;
351 struct cachefiles_object *object = cookie->cache_priv;
352 struct cachefiles_cache *cache = object->volume->cache;
355 _enter("o=%x", object->debug_id);
356 cachefiles_see_object(object, cachefiles_obj_see_withdraw_cookie);
358 if (!list_empty(&object->cache_link)) {
360 cachefiles_see_object(object, cachefiles_obj_see_withdrawal);
361 list_del_init(&object->cache_link);
365 cachefiles_ondemand_clean_object(object);
367 if (object->file) {
369 cachefiles_clean_up_object(object, cache);
374 cachefiles_put_object(object, cachefiles_obj_put_detach);
382 struct cachefiles_object *object = cookie->cache_priv;
386 _enter("o=%x,[%llu]", object->debug_id, object->cookie->object_size);
388 old_tmpfile = test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags);
390 if (!object->file) {
396 new_file = cachefiles_create_tmpfile(object);
402 spin_lock(&object->lock);
404 old_file = object->file;
405 object->file = new_file;
406 object->content_info = CACHEFILES_CONTENT_NO_DATA;
407 set_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags);
408 set_bit(FSCACHE_COOKIE_NEEDS_UPDATE, &object->cookie->flags);
410 spin_unlock(&object->lock);
418 struct cachefiles_volume *volume = object->volume;
422 cachefiles_bury_object(volume->cache, object, fan,