• Christoph Hellwig's avatar
    btrfs: don't check PageError in __extent_writepage · 3e92499e
    Christoph Hellwig authored
    __extent_writepage currenly sets PageError whenever any error happens,
    and the also checks for PageError to decide if to call error handling.
    This leads to very unclear responsibility for cleaning up on errors.
    In the VM and generic writeback helpers the basic idea is that once
    I/O is fired off all error handling responsibility is delegated to the
    end I/O handler.  But if that end I/O handler sets the PageError bit,
    and the submitter checks it, the bit could in some cases leak into the
    submission context for fast enough I/O.
    
    Fix this by simply not checking PageError and just using the local
    ret variable to check for submission errors.  This also fundamentally
    solves the long problem documented in a comment in __extent_writepage
    by never leaking the error bit into the submission context.
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    3e92499e
extent_io.c 132 KB