• Filipe Manana's avatar
    Btrfs: fix double range unlock of hole region when reading page · 5e6ecb36
    Filipe Manana authored
    If when reading a page we find a hole and our caller had already locked
    the range (bio flags has the bit EXTENT_BIO_PARENT_LOCKED set), we end
    up unlocking the hole's range and then later our caller unlocks it
    again, which might have already been locked by some other task once
    the first unlock happened.
    
    Currently this can only happen during a call to the extent_same ioctl,
    as it's the only caller of __do_readpage() that sets the bit
    EXTENT_BIO_PARENT_LOCKED for bio flags.
    
    Fix this by leaving the unlock exclusively to the caller.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    5e6ecb36
extent_io.c 144 KB