• Josef Bacik's avatar
    btrfs: call mapping_set_error() on btree inode with a write error · 68b85589
    Josef Bacik authored
    generic/484 fails sometimes with compression on because the write ends
    up small enough that it goes into the btree.  This means that we never
    call mapping_set_error() on the inode itself, because the page gets
    marked as fine when we inline it into the metadata.  When the metadata
    writeback happens we see it and abort the transaction properly and mark
    the fs as readonly, however we don't do the mapping_set_error() on
    anything.  In syncfs() we will simply return 0 if the sb is marked
    read-only, so we can't check for this in our syncfs callback.  The only
    way the error gets returned if we called mapping_set_error() on
    something.  Fix this by calling mapping_set_error() on the btree inode
    mapping.  This allows us to properly return an error on syncfs and pass
    generic/484 with compression on.
    Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    68b85589
extent_io.c 196 KB