]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: improve replacing nocow extents
authorJosef Bacik <jbacik@fusionio.com>
Thu, 12 Sep 2013 20:58:28 +0000 (16:58 -0400)
committerChris Mason <chris.mason@fusionio.com>
Sat, 21 Sep 2013 15:05:26 +0000 (11:05 -0400)
commit65831ad71507bcd8d228fab5647f960cdd0a758b
treebb7d2dc93f26e9f8cefe00b590304755a07558eb
parent56d2c6c4d02fe5dc8ff6534ea8b2bb2ac9316981
Btrfs: improve replacing nocow extents

Various people have hit a deadlock when running btrfs/011.  This is because when
replacing nocow extents we will take the i_mutex to make sure nobody messes with
the file while we are replacing the extent.  The problem is we are already
holding a transaction open, which is a locking inversion, so instead we need to
save these inodes we find and then process them outside of the transaction.

Further we can't just lock the inode and assume we are good to go.  We need to
lock the extent range and then read back the extent cache for the inode to make
sure the extent really still points at the physical block we want.  If it
doesn't we don't have to copy it.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/scrub.c