aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cachefiles/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/cachefiles/interface.c')
-rw-r--r--fs/cachefiles/interface.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/cachefiles/interface.c b/fs/cachefiles/interface.c
index ce5f345d70f5..e7f16a77a22a 100644
--- a/fs/cachefiles/interface.c
+++ b/fs/cachefiles/interface.c
@@ -253,6 +253,8 @@ static void cachefiles_drop_object(struct fscache_object *_object)
253 struct cachefiles_object *object; 253 struct cachefiles_object *object;
254 struct cachefiles_cache *cache; 254 struct cachefiles_cache *cache;
255 const struct cred *saved_cred; 255 const struct cred *saved_cred;
256 struct inode *inode;
257 blkcnt_t i_blocks = 0;
256 258
257 ASSERT(_object); 259 ASSERT(_object);
258 260
@@ -279,6 +281,10 @@ static void cachefiles_drop_object(struct fscache_object *_object)
279 _object != cache->cache.fsdef 281 _object != cache->cache.fsdef
280 ) { 282 ) {
281 _debug("- retire object OBJ%x", object->fscache.debug_id); 283 _debug("- retire object OBJ%x", object->fscache.debug_id);
284 inode = d_backing_inode(object->dentry);
285 if (inode)
286 i_blocks = inode->i_blocks;
287
282 cachefiles_begin_secure(cache, &saved_cred); 288 cachefiles_begin_secure(cache, &saved_cred);
283 cachefiles_delete_object(cache, object); 289 cachefiles_delete_object(cache, object);
284 cachefiles_end_secure(cache, saved_cred); 290 cachefiles_end_secure(cache, saved_cred);
@@ -292,7 +298,7 @@ static void cachefiles_drop_object(struct fscache_object *_object)
292 298
293 /* note that the object is now inactive */ 299 /* note that the object is now inactive */
294 if (test_bit(CACHEFILES_OBJECT_ACTIVE, &object->flags)) 300 if (test_bit(CACHEFILES_OBJECT_ACTIVE, &object->flags))
295 cachefiles_mark_object_inactive(cache, object); 301 cachefiles_mark_object_inactive(cache, object, i_blocks);
296 302
297 dput(object->dentry); 303 dput(object->dentry);
298 object->dentry = NULL; 304 object->dentry = NULL;