aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/super.c
diff options
context:
space:
mode:
authorChris Mason <clm@fb.com>2015-08-09 10:35:33 -0400
committerChris Mason <clm@fb.com>2015-08-09 10:35:33 -0400
commit46cd28555ffaa40162290dba203daad0ff6f7abd (patch)
treea10fd81b6c7ff5ea7642b1e2462e529971e8713a /fs/btrfs/super.c
parentda2f0f74cf7d074e5a8918c8efdf6aba4a989b4a (diff)
parente33e17ee1098d8d751552ac11c111e1c1a3db014 (diff)
Merge branch 'jeffm-discard-4.3' into for-linus-4.3
Diffstat (limited to 'fs/btrfs/super.c')
-rw-r--r--fs/btrfs/super.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index d366dd4664d0..c389c13f0f38 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -69,7 +69,7 @@ static struct file_system_type btrfs_fs_type;
69 69
70static int btrfs_remount(struct super_block *sb, int *flags, char *data); 70static int btrfs_remount(struct super_block *sb, int *flags, char *data);
71 71
72static const char *btrfs_decode_error(int errno) 72const char *btrfs_decode_error(int errno)
73{ 73{
74 char *errstr = "unknown"; 74 char *errstr = "unknown";
75 75
@@ -1651,6 +1651,17 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data)
1651 1651
1652 sb->s_flags |= MS_RDONLY; 1652 sb->s_flags |= MS_RDONLY;
1653 1653
1654 /*
1655 * Setting MS_RDONLY will put the cleaner thread to
1656 * sleep at the next loop if it's already active.
1657 * If it's already asleep, we'll leave unused block
1658 * groups on disk until we're mounted read-write again
1659 * unless we clean them up here.
1660 */
1661 mutex_lock(&root->fs_info->cleaner_mutex);
1662 btrfs_delete_unused_bgs(fs_info);
1663 mutex_unlock(&root->fs_info->cleaner_mutex);
1664
1654 btrfs_dev_replace_suspend_for_unmount(fs_info); 1665 btrfs_dev_replace_suspend_for_unmount(fs_info);
1655 btrfs_scrub_cancel(fs_info); 1666 btrfs_scrub_cancel(fs_info);
1656 btrfs_pause_balance(fs_info); 1667 btrfs_pause_balance(fs_info);