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>
This commit is contained in:
@@ -279,7 +279,7 @@ static int process_one_buffer(struct btrfs_root *log,
|
||||
log->fs_info->extent_root,
|
||||
eb->start, eb->len);
|
||||
|
||||
if (btrfs_buffer_uptodate(eb, gen)) {
|
||||
if (btrfs_buffer_uptodate(eb, gen, 0)) {
|
||||
if (wc->write)
|
||||
btrfs_write_tree_block(eb);
|
||||
if (wc->wait)
|
||||
|
Reference in New Issue
Block a user