Patchwork [3.5.y.z,extended,stable] Patch "btrfs: Init io_lock after cloning btrfs device struct" has been added to staging queue

mail settings
Submitter Luis Henriques
Date March 4, 2013, 8:48 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/224796/
State New
Headers show


Luis Henriques - March 4, 2013, 8:48 p.m.
This is a note to let you know that I have just added a patch titled

    btrfs: Init io_lock after cloning btrfs device struct

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From f3640d1862446a9136d114e1edcba6044510e8ff Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <>
Date: Wed, 20 Feb 2013 14:06:20 -0500
Subject: [PATCH] btrfs: Init io_lock after cloning btrfs device struct

commit 1cba0cdf5e4dbcd9e5fa5b54d7a028e55e2ca057 upstream.

__btrfs_close_devices() clones btrfs device structs with
memcpy(). Some of the fields in the clone are reinitialized, but it's
missing to init io_lock. In mainline this goes unnoticed, but on RT it
leaves the plist pointing to the original about to be freed lock

Initialize io_lock after cloning, so no references to the original
struct are left.

Reported-and-tested-by: Mike Galbraith <>
Signed-off-by: Thomas Gleixner <>
Signed-off-by: Chris Mason <>
Signed-off-by: Luis Henriques <>
 fs/btrfs/volumes.c | 1 +
 1 file changed, 1 insertion(+)



diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 037e0bb..2208f0f 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -575,6 +575,7 @@  static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
 		new_device->writeable = 0;
 		new_device->in_fs_metadata = 0;
 		new_device->can_discard = 0;
+		spin_lock_init(&new_device->io_lock);
 		list_replace_rcu(&device->dev_list, &new_device->dev_list);

 		call_rcu(&device->rcu, free_device);