• Johannes Thumshirn's avatar
    btrfs: zoned: fix parallel compressed writes · 764c7c9a
    Johannes Thumshirn authored
    When multiple processes write data to the same block group on a
    compressed zoned filesystem, the underlying device could report I/O
    errors and data corruption is possible.
    
    This happens because on a zoned file system, compressed data writes
    where sent to the device via a REQ_OP_WRITE instead of a
    REQ_OP_ZONE_APPEND operation. But with REQ_OP_WRITE and parallel
    submission it cannot be guaranteed that the data is always submitted
    aligned to the underlying zone's write pointer.
    
    The change to using REQ_OP_ZONE_APPEND instead of REQ_OP_WRITE on a
    zoned filesystem is non intrusive on a regular file system or when
    submitting to a conventional zone on a zoned filesystem, as it is
    guarded by btrfs_use_zone_append.
    Reported-by: default avatarDavid Sterba <dsterba@suse.com>
    Fixes: 9d294a68 ("btrfs: zoned: enable to mount ZONED incompat flag")
    CC: stable@vger.kernel.org # 5.12.x: e380adfc: btrfs: zoned: pass start block to btrfs_use_zone_append
    CC: stable@vger.kernel.org # 5.12.x
    Signed-off-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    764c7c9a
compression.c 45.5 KB