aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWang Shilong <wangsl.fnst@cn.fujitsu.com>2013-07-13 21:02:54 +0800
committerChris Mason <chris.mason@fusionio.com>2013-09-01 07:57:36 -0400
commit1e7bac1ef754b3112eb78c64a7382d286e454424 (patch)
treea129f88c3ef5fe94a0ed42c7b2dc4b00d72df264
parent647f63bd363e5f4800bf3e85a613793e1eb4bf25 (diff)
downloadkernel_goldelico_gta04-1e7bac1ef754b3112eb78c64a7382d286e454424.zip
kernel_goldelico_gta04-1e7bac1ef754b3112eb78c64a7382d286e454424.tar.gz
kernel_goldelico_gta04-1e7bac1ef754b3112eb78c64a7382d286e454424.tar.bz2
Btrfs: set qgroup_ulist to be null after calling ulist_free()
We call ulist_free(qgroup_ulist) in btrfs_free_qgroup_config(), and btrfs_free_qgroup_config() may be called in two cases: (1)umount filesystem (2)disabling quota However, if we firstly disable quota and then umount filesystem, a double free happens. Fix it. Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r--fs/btrfs/qgroup.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 1280eff..64a9e3c 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -460,7 +460,13 @@ void btrfs_free_qgroup_config(struct btrfs_fs_info *fs_info)
}
kfree(qgroup);
}
+ /*
+ * we call btrfs_free_qgroup_config() when umounting
+ * filesystem and disabling quota, so we set qgroup_ulit
+ * to be null here to avoid double free.
+ */
ulist_free(fs_info->qgroup_ulist);
+ fs_info->qgroup_ulist = NULL;
}
static int add_qgroup_relation_item(struct btrfs_trans_handle *trans,