]> git.karo-electronics.de Git - karo-tx-linux.git/commit
Btrfs: do not hold the write_lock on the extent tree while logging
authorJosef Bacik <jbacik@fusionio.com>
Fri, 14 Sep 2012 16:59:20 +0000 (12:59 -0400)
committerChris Mason <chris.mason@fusionio.com>
Mon, 1 Oct 2012 19:19:27 +0000 (15:19 -0400)
commit6482a8097c1a09b5a1a67dab6debfa6aba590042
tree4b6aacb791969bbd0ded2d53dcfd94a31dcf013f
parent9bade384a59a44cec34ab3e3e6d6108ec689d69f
Btrfs: do not hold the write_lock on the extent tree while logging

Dave Sterba pointed out a sleeping while atomic bug while doing fsync.  This
is because I'm an idiot and didn't realize that rwlock's were spin locks, so
we've been holding this thing while doing allocations and such which is not
good.  This patch fixes this by dropping the write lock before we do
anything heavy and re-acquire it when it is done.  We also need to take a
ref on the em's in case their corresponding pages are evicted and mark them
as being logged so that releasepage does not remove them and doesn't remove
them from our local list.  Thanks,

Reported-by: Dave Sterba <dave@jikos.cz>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
fs/btrfs/extent_map.c
fs/btrfs/extent_map.h
fs/btrfs/tree-log.c