Split cachefiles_drop_object() up a bit to make it easier to modify later.

Signed-off-by: David Howells <dhowe...@redhat.com>
---

 fs/cachefiles/interface.c |   58 ++++++++++++++++++++++++++++++---------------
 1 file changed, 39 insertions(+), 19 deletions(-)

diff --git a/fs/cachefiles/interface.c b/fs/cachefiles/interface.c
index e4d1a82b9f33..56ed6f203e1c 100644
--- a/fs/cachefiles/interface.c
+++ b/fs/cachefiles/interface.c
@@ -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("");


Reply via email to