@@ -101,8 +101,6 @@ static int cachefiles_daemon_add_cache(struct cachefiles_cache *cache)
if (!fsdef)
goto error_root_object;
- ASSERTCMP(fsdef->backer, ==, NULL);
-
atomic_set(&fsdef->usage, 1);
fsdef->type = FSCACHE_COOKIE_TYPE_INDEX;
@@ -31,8 +31,6 @@ static struct fscache_object *cachefiles_alloc_object(
if (!object)
goto nomem_object;
- ASSERTCMP(object->backer, ==, NULL);
-
atomic_set(&object->usage, 1);
fscache_object_init(&object->fscache, cookie, &cache->cache);
@@ -191,10 +189,6 @@ static void cachefiles_drop_object(struct fscache_object *_object)
}
/* close the filesystem stuff attached to the object */
- if (object->backer != object->dentry)
- dput(object->backer);
- object->backer = NULL;
-
cachefiles_unmark_inode_in_use(object);
dput(object->dentry);
object->dentry = NULL;
@@ -235,7 +229,6 @@ void cachefiles_put_object(struct fscache_object *_object,
_debug("- kill object OBJ%x", object->fscache.debug_id);
ASSERTCMP(object->fscache.parent, ==, NULL);
- ASSERTCMP(object->backer, ==, NULL);
ASSERTCMP(object->dentry, ==, NULL);
ASSERTCMP(object->fscache.n_ops, ==, 0);
ASSERTCMP(object->fscache.n_children, ==, 0);
@@ -303,17 +296,14 @@ static int cachefiles_attr_changed(struct cachefiles_object *object)
if (ni_size == object->i_size)
return 0;
- if (!object->backer)
- return -ENOBUFS;
+ ASSERT(d_is_reg(object->dentry));
- ASSERT(d_is_reg(object->backer));
-
- oi_size = i_size_read(d_backing_inode(object->backer));
+ oi_size = i_size_read(d_backing_inode(object->dentry));
if (oi_size == ni_size)
return 0;
cachefiles_begin_secure(cache, &saved_cred);
- inode_lock(d_inode(object->backer));
+ inode_lock(d_inode(object->dentry));
/* if there's an extension to a partial page at the end of the backing
* file, we need to discard the partial page so that we pick up new
@@ -322,17 +312,17 @@ static int cachefiles_attr_changed(struct cachefiles_object *object)
_debug("discard tail %llx", oi_size);
newattrs.ia_valid = ATTR_SIZE;
newattrs.ia_size = oi_size & PAGE_MASK;
- ret = notify_change(&init_user_ns, object->backer, &newattrs, NULL);
+ ret = notify_change(&init_user_ns, object->dentry, &newattrs, NULL);
if (ret < 0)
goto truncate_failed;
}
newattrs.ia_valid = ATTR_SIZE;
newattrs.ia_size = ni_size;
- ret = notify_change(&init_user_ns, object->backer, &newattrs, NULL);
+ ret = notify_change(&init_user_ns, object->dentry, &newattrs, NULL);
truncate_failed:
- inode_unlock(d_inode(object->backer));
+ inode_unlock(d_inode(object->dentry));
cachefiles_end_secure(cache, saved_cred);
if (ret == -EIO) {
@@ -365,10 +355,10 @@ static void cachefiles_invalidate_object(struct fscache_object *_object)
_enter("{OBJ%x},[%llu]",
object->fscache.debug_id, (unsigned long long)ni_size);
- if (object->backer) {
- ASSERT(d_is_reg(object->backer));
+ if (object->dentry) {
+ ASSERT(d_is_reg(object->dentry));
- path.dentry = object->backer;
+ path.dentry = object->dentry;
path.mnt = cache->mnt;
cachefiles_begin_secure(cache, &saved_cred);
@@ -36,7 +36,6 @@ struct cachefiles_object {
struct fscache_object fscache; /* fscache handle */
char *d_name; /* Filename */
struct dentry *dentry; /* the file/dir representing this object */
- struct dentry *backer; /* backing file */
loff_t i_size; /* object size */
atomic_t usage; /* object usage count */
uint8_t type; /* object type */
@@ -426,9 +426,9 @@ int cachefiles_begin_operation(struct netfs_cache_resources *cres)
struct cachefiles_cache, cache);
path.mnt = cache->mnt;
- path.dentry = object->backer;
+ path.dentry = object->dentry;
file = open_with_fake_path(&path, O_RDWR | O_LARGEFILE | O_DIRECT,
- d_inode(object->backer), cache->cache_cred);
+ d_inode(object->dentry), cache->cache_cred);
if (IS_ERR(file))
return PTR_ERR(file);
if (!S_ISREG(file_inode(file)->i_mode))
@@ -459,7 +459,6 @@ int cachefiles_walk_to_object(struct cachefiles_object *parent,
if (ret < 0)
goto check_error;
- object->backer = object->dentry;
object->new = false;
fscache_obtained_object(&object->fscache);
_leave(" = 0 [%lu]", d_backing_inode(object->dentry)->i_ino);
The cachefiles_object struct has two dentry pointers - one for the file/directory representing the object and a second one in case a data object is a directory with a file inside of it that contains the data (the idea being that there might be another file, say, containing a journal of local changes that need committing or a list of cached xattrs). At the moment, this isn't implemented, so remove it and always use the main dentry pointer. Signed-off-by: David Howells <dhowells@redhat.com> --- fs/cachefiles/bind.c | 2 -- fs/cachefiles/interface.c | 28 +++++++++------------------- fs/cachefiles/internal.h | 1 - fs/cachefiles/io.c | 4 ++-- fs/cachefiles/namei.c | 1 - 5 files changed, 11 insertions(+), 25 deletions(-)