]> asedeno.scripts.mit.edu Git - linux.git/commit
btrfs: defer adding raid type kobject until after chunk relocation
authorJeff Mahoney <jeffm@suse.com>
Tue, 20 Mar 2018 19:25:26 +0000 (15:25 -0400)
committerDavid Sterba <dsterba@suse.com>
Fri, 30 Mar 2018 23:41:12 +0000 (01:41 +0200)
commit75cb379d2635215ad2c67750693f7dc45ad19a5f
tree0e3a1380015be15bbed794330fae015c3ca6a537
parentdc2d3005d27da41247d6c42077e335a777afc79c
btrfs: defer adding raid type kobject until after chunk relocation

Any time the first block group of a new type is created, we add a new
kobject to sysfs to hold the attributes for that type.  Kobject-internal
allocations always use GFP_KERNEL, making them prone to fs-reclaim races.
While it appears as if this can occur any time a block group is created,
the only times the first block group of a new type can be created in
memory is at mount and when we create the first new block group during
raid conversion.

This patch adds a new list to track pending kobject additions and then
handles them after we do chunk relocation.  Between relocating the
target chunk (or forcing allocation of a new chunk in the case of data)
and removing the old chunk, we're in a safe place for fs-reclaim to
occur.  We're holding the volume mutex, which is already held across
page faults, and the delete_unused_bgs_mutex, which will only stall
the cleaner thread.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c
fs/btrfs/sysfs.c
fs/btrfs/volumes.c