Hi, is it planned to implement write zeroes in qemu rbd block driver soon ? (bdrv_co_write_zeroes) It's really missing currently, as qemu drive-mirror need it to have sparse images on copy. Ref from my discussion with Paolo from redhat in 2014 about this: https://lists.gnu.org/archive/html/qemu-devel/2014-10/msg01274.html REgards, Alexandre ----- Mail original ----- De: "Jason Dillaman" <jdillama@xxxxxxxxxx> À: "Ilya Dryomov" <idryomov@xxxxxxxxx> Cc: "ceph-devel" <ceph-devel@xxxxxxxxxxxxxxx>, "Christoph Hellwig" <hch@xxxxxx>, "Hannes Reinecke" <hare@xxxxxxxx> Envoyé: Mardi 23 Mai 2017 20:28:00 Objet: Re: [PATCH] rbd: implement REQ_OP_WRITE_ZEROES lgtm Reviewed-by: Jason Dillaman <dillaman@xxxxxxxxxx> On Tue, May 23, 2017 at 11:08 AM, Ilya Dryomov <idryomov@xxxxxxxxx> wrote: > Commit 93c1defedcae ("rbd: remove the discard_zeroes_data flag") > explicitly didn't implement REQ_OP_WRITE_ZEROES for rbd, while the > following commit 48920ff2a5a9 ("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: 93c1defedcae ("rbd: remove the discard_zeroes_data flag") > Signed-off-by: Ilya Dryomov <idryomov@xxxxxxxxx> > --- > drivers/block/rbd.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c > index 454bf9c34882..c16f74547804 100644 > --- a/drivers/block/rbd.c > +++ b/drivers/block/rbd.c > @@ -4023,6 +4023,7 @@ static void rbd_queue_workfn(struct work_struct *work) > > switch (req_op(rq)) { > case REQ_OP_DISCARD: > + case REQ_OP_WRITE_ZEROES: > op_type = OBJ_OP_DISCARD; > break; > case REQ_OP_WRITE: > @@ -4420,6 +4421,7 @@ static int rbd_init_disk(struct rbd_device *rbd_dev) > q->limits.discard_granularity = segment_size; > q->limits.discard_alignment = segment_size; > blk_queue_max_discard_sectors(q, segment_size / SECTOR_SIZE); > + blk_queue_max_write_zeroes_sectors(q, segment_size / SECTOR_SIZE); > > if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC)) > q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES; > -- > 2.4.3 > > -- > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Jason -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html