@@ -192,6 +192,42 @@ static void cachefiles_update_object(struct fscache_object *_object)
_leave("");
}
+/*
+ * Commit changes to the object as we drop it.
+ */
+static void cachefiles_commit_object(struct cachefiles_object *object,
+ struct cachefiles_cache *cache)
+{
+}
+
+/*
+ * Finalise and object and close the VFS structs that we have.
+ */
+static void cachefiles_clean_up_object(struct cachefiles_object *object,
+ struct cachefiles_cache *cache,
+ bool invalidate)
+{
+ if (invalidate && &object->fscache != cache->cache.fsdef) {
+ _debug("- inval object OBJ%x", object->fscache.debug_id);
+ cachefiles_delete_object(cache, object);
+ } else {
+ cachefiles_commit_object(object, cache);
+ }
+
+ /* close the filesystem stuff attached to the object */
+ if (object->backing_file)
+ fput(object->backing_file);
+ object->backing_file = NULL;
+
+ if (object->backer != object->dentry)
+ dput(object->backer);
+ object->backer = NULL;
+
+ cachefiles_unmark_inode_in_use(object, object->dentry);
+ dput(object->dentry);
+ object->dentry = NULL;
+}
+
/*
* discard the resources pinned by an object and effect retirement if
* requested
@@ -223,25 +259,9 @@ static void cachefiles_drop_object(struct fscache_object *_object,
* before we set it up.
*/
if (object->dentry) {
- if (invalidate && _object != cache->cache.fsdef) {
- _debug("- inval object OBJ%x", object->fscache.debug_id);
- cachefiles_begin_secure(cache, &saved_cred);
- cachefiles_delete_object(cache, object);
- cachefiles_end_secure(cache, saved_cred);
- }
-
- /* close the filesystem stuff attached to the object */
- if (object->backing_file)
- fput(object->backing_file);
- object->backing_file = NULL;
-
- if (object->backer != object->dentry)
- dput(object->backer);
- object->backer = NULL;
-
- cachefiles_unmark_inode_in_use(object, object->dentry);
- dput(object->dentry);
- object->dentry = NULL;
+ cachefiles_begin_secure(cache, &saved_cred);
+ cachefiles_clean_up_object(object, cache, invalidate);
+ cachefiles_end_secure(cache, saved_cred);
}
_leave("");
Split cachefiles_drop_object() up a bit to make it easier to modify later. Signed-off-by: David Howells <dhowells@redhat.com> --- fs/cachefiles/interface.c | 58 ++++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 19 deletions(-)