• Chris Mason's avatar
    Btrfs: fix releasepage to avoid unlocking extents we haven't locked · 11ef160f
    Chris Mason authored
    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: default avatarChris Mason <chris.mason@oracle.com>
    11ef160f
extent_io.c 92.3 KB