• Ilya Dryomov's avatar
    rbd: implement REQ_OP_WRITE_ZEROES · 6ac56951
    Ilya Dryomov authored
    Commit 93c1defe ("rbd: remove the discard_zeroes_data flag")
    explicitly didn't implement REQ_OP_WRITE_ZEROES for rbd, while the
    following commit 48920ff2 ("block: remove the discard_zeroes_data
    flag") dropped ->discard_zeroes_data in favor of REQ_OP_WRITE_ZEROES.
    
    rbd does support efficient zeroing via CEPH_OSD_OP_ZERO opcode and will
    release either some or all blocks depending on whether the zeroing
    request is rbd_obj_bytes() aligned.  This is how we currently implement
    discards, so REQ_OP_WRITE_ZEROES can be identical to REQ_OP_DISCARD for
    now.  Caveats:
    
    - REQ_NOUNMAP is ignored, but AFAICT that's true of at least two other
      current implementations - nvme and loop
    
    - there is no ->write_zeroes_alignment and blk_bio_write_zeroes_split()
      is hence less helpful than blk_bio_discard_split(), but this can (and
      should) be fixed on the rbd side
    
    In the future we will split these into two code paths to respect
    REQ_NOUNMAP on zeroout and save on zeroing blocks that couldn't be
    released on discard.
    
    Fixes: 93c1defe ("rbd: remove the discard_zeroes_data flag")
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    Reviewed-by: default avatarJason Dillaman <dillaman@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    6ac56951
rbd.c 166 KB