Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 544f39d3 authored by Paul Lawrence's avatar Paul Lawrence Committed by Treehugger Robot
Browse files

ANDROID: incremental fs: Evict inodes before freeing mount data



Since evicting inodes triggers writes to the backing file, which uses
the mi_owner field from the mount_info struct, make sure inodes are
evicted before we free the mount_info data

Test: incfs_test
Bug: 270117845
Change-Id: I673b2e0e04b5adc3998caf6f22443598a30338af
Signed-off-by: default avatarPaul Lawrence <paullawrence@google.com>
(cherry picked from commit 7899985277527b29c47929a6d6a89c5c89b406ad)
(cherry picked from commit faf3626b8e34df3dfff3a99e6582a9abd24410ce)
Signed-off-by: default avatarLee Jones <joneslee@google.com>
parent 7cf5d821
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -30,6 +30,15 @@ static ssize_t corefs_show(struct kobject *kobj,

static struct kobj_attribute corefs_attr = __ATTR_RO(corefs);

static ssize_t bugfix_inode_eviction_show(struct kobject *kobj,
			 struct kobj_attribute *attr, char *buff)
{
	return snprintf(buff, PAGE_SIZE, "supported\n");
}

static struct kobj_attribute bugfix_inode_eviction_attr =
	__ATTR_RO(bugfix_inode_eviction);

static ssize_t mounter_context_for_backing_rw_show(struct kobject *kobj,
			  struct kobj_attribute *attr, char *buff)
{
@@ -41,6 +50,7 @@ static struct kobj_attribute mounter_context_for_backing_rw_attr =

static struct attribute *attributes[] = {
	&corefs_attr.attr,
	&bugfix_inode_eviction_attr.attr,
	&mounter_context_for_backing_rw_attr.attr,
	NULL,
};
+7 −1
Original line number Diff line number Diff line
@@ -2309,6 +2309,13 @@ void incfs_kill_sb(struct super_block *sb)

	pr_debug("incfs: unmount\n");

	/*
	 * We must kill the super before freeing mi, since killing the super
	 * triggers inode eviction, which triggers the final update of the
	 * backing file, which uses certain information for mi
	 */
	kill_anon_super(sb);

	if (mi) {
		if (mi->mi_backing_dir_path.dentry)
			dinode = d_inode(mi->mi_backing_dir_path.dentry);
@@ -2320,7 +2327,6 @@ void incfs_kill_sb(struct super_block *sb)
		incfs_free_mount_info(mi);
		sb->s_fs_info = NULL;
	}
	kill_anon_super(sb);
}

static int show_options(struct seq_file *m, struct dentry *root)