Btrfs: avoid sleeping in verify_parent_transid while atomic
authorChris Mason <chris.mason@oracle.com>
Sun, 6 May 2012 11:23:47 +0000 (07:23 -0400)
committerChris Mason <chris.mason@oracle.com>
Sun, 6 May 2012 11:23:47 +0000 (07:23 -0400)
commitb9fab919b748c7b39c19ff236ed6c5682c266dde
tree49e5a6f8041a7f0a9be0c1a39cd9088e3faa1df2
parentea9947b4395fa34666086b2fa6f686e94903e047
Btrfs: avoid sleeping in verify_parent_transid while atomic

verify_parent_transid needs to lock the extent range to make
sure no IO is underway, and so it can safely clear the
uptodate bits if our checks fail.

But, a few callers are using it with spinlocks held.  Most
of the time, the generation numbers are going to match, and
we don't want to switch to a blocking lock just for the error
case.  This adds an atomic flag to verify_parent_transid,
and changes it to return EAGAIN if it needs to block to
properly verifiy things.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/ctree.c
fs/btrfs/disk-io.c
fs/btrfs/disk-io.h
fs/btrfs/extent-tree.c
fs/btrfs/tree-log.c