Kyle McMartin 5a95077
From 3d07b06c5d62e98b46ef21980e5c2a904990149f Mon Sep 17 00:00:00 2001
Kyle McMartin 5a95077
From: Kyle McMartin <kyle@mcmartin.ca>
Kyle McMartin 5a95077
Date: Fri, 10 Dec 2010 10:32:29 -0500
Kyle McMartin 54f1e03
Subject: [PATCH] Btrfs - fix race between btrfs_get_sb() and umount
Kyle McMartin 54f1e03
Kyle McMartin 54f1e03
When mounting a btrfs file system btrfs_test_super() may attempt to
Kyle McMartin 54f1e03
use sb->s_fs_info, the btrfs root, of a super block that is going away
Kyle McMartin 54f1e03
and that has had the btrfs root set to NULL in its ->put_super(). But
Kyle McMartin 54f1e03
if the super block is going away it cannot be an existing super block
Kyle McMartin 54f1e03
so we can return false in this case.
Kyle McMartin 54f1e03
Kyle McMartin 54f1e03
Signed-off-by: Ian Kent <raven@themaw.net>
Kyle McMartin 54f1e03
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Kyle McMartin 5a95077
Kyle McMartin 5a95077
Conflicts:
Kyle McMartin 5a95077
Kyle McMartin 5a95077
	fs/btrfs/super.c
Kyle McMartin 54f1e03
---
Kyle McMartin 54f1e03
 fs/btrfs/super.c |    6 ++++++
Kyle McMartin 54f1e03
 1 files changed, 6 insertions(+), 0 deletions(-)
Kyle McMartin 54f1e03
Kyle McMartin 54f1e03
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
Kyle McMartin 5a95077
index 89e299f..f4a4dd3 100644
Kyle McMartin 54f1e03
--- a/fs/btrfs/super.c
Kyle McMartin 54f1e03
+++ b/fs/btrfs/super.c
Kyle McMartin 54f1e03
@@ -551,6 +551,12 @@ static int btrfs_test_super(struct super_block *s, void *data)
Kyle McMartin 54f1e03
 	struct btrfs_root *test_root = data;
Kyle McMartin 54f1e03
 	struct btrfs_root *root = btrfs_sb(s);
Kyle McMartin 54f1e03
 
Kyle McMartin 54f1e03
+	/*
Kyle McMartin 54f1e03
+	 * If this super block is going away, return false as it
Kyle McMartin 54f1e03
+	 * can't match as an existing super block.
Kyle McMartin 54f1e03
+	 */
Kyle McMartin 54f1e03
+	if (!atomic_read(&s->s_active))
Kyle McMartin 54f1e03
+		return 0;
Kyle McMartin 5a95077
 	return root->fs_info->fs_devices == test_root->fs_info->fs_devices;
Kyle McMartin 54f1e03
 }
Kyle McMartin 54f1e03
 
Kyle McMartin 54f1e03
-- 
Kyle McMartin 54f1e03
1.7.3.3
Kyle McMartin 54f1e03