]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: fix releasepage to avoid unlocking extents we haven't locked
authorChris Mason <chris.mason@oracle.com>
Thu, 24 Sep 2009 00:28:46 +0000 (20:28 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 24 Sep 2009 00:30:53 +0000 (20:30 -0400)
commita602b6352f8cc40137460361c2583f1fd737658f
tree2cd7577234c112177a06ad09c0c507c81cb9658a
parent08e6c6aff6248fcde158300aba647d495c2dc873
Btrfs: fix releasepage to avoid unlocking extents we haven't locked

During releasepage, we try to drop any extent_state structs for the
bye offsets of the page we're releaseing.  But the code was incorrectly
telling clear_extent_bit to delete the state struct unconditionallly.

Normally this would be fine because we have the page locked, but other
parts of btrfs will lock down an entire extent, the most common place
being IO completion.

releasepage was deleting the extent state without first locking the extent,
which may result in removing a state struct that another process had
locked down.  The fix here is to leave the NODATASUM and EXTENT_LOCKED
bits alone in releasepage.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent_io.c