diff options
author | Chris Mason <chris.mason@oracle.com> | 2009-04-21 11:53:38 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2009-04-21 12:45:12 -0400 |
commit | 546888da82082555a56528730a83f0afd12f33bf (patch) | |
tree | 98ee868d1b8a4bd390a980fed707f91419b79fb5 /fs/open.c | |
parent | 8c594ea81d7abbbffdda447b127f8ba8d76f319d (diff) | |
download | blackbird-op-linux-546888da82082555a56528730a83f0afd12f33bf.tar.gz blackbird-op-linux-546888da82082555a56528730a83f0afd12f33bf.zip |
Btrfs: fix btrfs fallocate oops and deadlock
Btrfs fallocate was incorrectly starting a transaction with a lock held
on the extent_io tree for the file, which could deadlock. Strictly
speaking it was using join_transaction which would be safe, but it is better
to move the transaction outside of the lock.
When preallocated extents are overwritten, btrfs_mark_buffer_dirty was
being called on an unlocked buffer. This was triggering an assertion and
oops because the lock is supposed to be held.
The bug was calling btrfs_mark_buffer_dirty on a leaf after btrfs_del_item had
been run. btrfs_del_item takes care of dirtying things, so the solution is a
to skip the btrfs_mark_buffer_dirty call in this case.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/open.c')
0 files changed, 0 insertions, 0 deletions