From: "Michael S. Tsirkin" <mst@redhat.com>
To: yadong.qi@intel.com
Cc: kwolf@redhat.com, fam@euphon.net, qemu-block@nongnu.org,
luhai.chen@intel.com, qemu-devel@nongnu.org,
kai.z.wang@intel.com, hreitz@redhat.com, stefanha@redhat.com
Subject: Re: [PATCH 2/2] virtio-blk: support BLKSECDISCARD
Date: Mon, 15 Nov 2021 05:57:34 -0500 [thread overview]
Message-ID: <20211115055630-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20211115045200.3567293-3-yadong.qi@intel.com>
On Mon, Nov 15, 2021 at 12:52:00PM +0800, yadong.qi@intel.com wrote:
> From: Yadong Qi <yadong.qi@intel.com>
>
> Add new virtio feature: VIRTIO_BLK_F_SECDISCARD.
> Add new virtio command: VIRTIO_BLK_T_SECDISCARD.
>
> This feature is disabled by default, it will check the backend
> bs->open_flags & BDRV_O_SECDISCARD, enable it if BDRV_O_SECDISCARD
> is supported.
>
> Signed-off-by: Yadong Qi <yadong.qi@intel.com>
> ---
> hw/block/virtio-blk.c | 26 +++++++++++++++++----
> include/standard-headers/linux/virtio_blk.h | 4 ++++
Any changes to standard headers need to go to linux and virtio TC.
> 2 files changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> index dbc4c5a3cd..7bc3484521 100644
> --- a/hw/block/virtio-blk.c
> +++ b/hw/block/virtio-blk.c
> @@ -536,7 +536,8 @@ static bool virtio_blk_sect_range_ok(VirtIOBlock *dev,
> }
>
> static uint8_t virtio_blk_handle_discard_write_zeroes(VirtIOBlockReq *req,
> - struct virtio_blk_discard_write_zeroes *dwz_hdr, bool is_write_zeroes)
> + struct virtio_blk_discard_write_zeroes *dwz_hdr, bool is_write_zeroes,
> + bool is_secdiscard)
> {
> VirtIOBlock *s = req->dev;
> VirtIODevice *vdev = VIRTIO_DEVICE(s);
> @@ -577,8 +578,8 @@ static uint8_t virtio_blk_handle_discard_write_zeroes(VirtIOBlockReq *req,
> goto err;
> }
>
> + int blk_aio_flags = 0;
> if (is_write_zeroes) { /* VIRTIO_BLK_T_WRITE_ZEROES */
> - int blk_aio_flags = 0;
>
> if (flags & VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP) {
> blk_aio_flags |= BDRV_REQ_MAY_UNMAP;
> @@ -600,7 +601,12 @@ static uint8_t virtio_blk_handle_discard_write_zeroes(VirtIOBlockReq *req,
> goto err;
> }
>
> - blk_aio_pdiscard(s->blk, sector << BDRV_SECTOR_BITS, bytes, 0,
> + if (is_secdiscard) {
> + blk_aio_flags |= BDRV_REQ_SECDISCARD;
> + }
> +
> + blk_aio_pdiscard(s->blk, sector << BDRV_SECTOR_BITS, bytes,
> + blk_aio_flags,
> virtio_blk_discard_write_zeroes_complete, req);
> }
>
> @@ -622,6 +628,7 @@ static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
> unsigned out_num = req->elem.out_num;
> VirtIOBlock *s = req->dev;
> VirtIODevice *vdev = VIRTIO_DEVICE(s);
> + bool is_secdiscard = false;
>
> if (req->elem.out_num < 1 || req->elem.in_num < 1) {
> virtio_error(vdev, "virtio-blk missing headers");
> @@ -722,6 +729,9 @@ static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
> * VIRTIO_BLK_T_OUT flag set. We masked this flag in the switch statement,
> * so we must mask it for these requests, then we will check if it is set.
> */
> + case VIRTIO_BLK_T_SECDISCARD & ~VIRTIO_BLK_T_OUT:
> + is_secdiscard = true;
> + __attribute__((fallthrough));
> case VIRTIO_BLK_T_DISCARD & ~VIRTIO_BLK_T_OUT:
> case VIRTIO_BLK_T_WRITE_ZEROES & ~VIRTIO_BLK_T_OUT:
> {
> @@ -752,7 +762,8 @@ static int virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
> }
>
> err_status = virtio_blk_handle_discard_write_zeroes(req, &dwz_hdr,
> - is_write_zeroes);
> + is_write_zeroes,
> + is_secdiscard);
> if (err_status != VIRTIO_BLK_S_OK) {
> virtio_blk_req_complete(req, err_status);
> virtio_blk_free_request(req);
> @@ -1201,6 +1212,11 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
> return;
> }
>
> + if (blk_get_flags(conf->conf.blk) & BDRV_O_SECDISCARD)
> + virtio_add_feature(&s->host_features, VIRTIO_BLK_F_SECDISCARD);
> + else
> + virtio_clear_feature(&s->host_features, VIRTIO_BLK_F_SECDISCARD);
> +
> if (virtio_has_feature(s->host_features, VIRTIO_BLK_F_WRITE_ZEROES) &&
> (!conf->max_write_zeroes_sectors ||
> conf->max_write_zeroes_sectors > BDRV_REQUEST_MAX_SECTORS)) {
> @@ -1307,6 +1323,8 @@ static Property virtio_blk_properties[] = {
> conf.report_discard_granularity, true),
> DEFINE_PROP_BIT64("write-zeroes", VirtIOBlock, host_features,
> VIRTIO_BLK_F_WRITE_ZEROES, true),
> + DEFINE_PROP_BIT64("secdiscard", VirtIOBlock, host_features,
> + VIRTIO_BLK_F_SECDISCARD, false),
> DEFINE_PROP_UINT32("max-discard-sectors", VirtIOBlock,
> conf.max_discard_sectors, BDRV_REQUEST_MAX_SECTORS),
> DEFINE_PROP_UINT32("max-write-zeroes-sectors", VirtIOBlock,
> diff --git a/include/standard-headers/linux/virtio_blk.h b/include/standard-headers/linux/virtio_blk.h
> index 2dcc90826a..c55a07840c 100644
> --- a/include/standard-headers/linux/virtio_blk.h
> +++ b/include/standard-headers/linux/virtio_blk.h
> @@ -40,6 +40,7 @@
> #define VIRTIO_BLK_F_MQ 12 /* support more than one vq */
> #define VIRTIO_BLK_F_DISCARD 13 /* DISCARD is supported */
> #define VIRTIO_BLK_F_WRITE_ZEROES 14 /* WRITE ZEROES is supported */
> +#define VIRTIO_BLK_F_SECDISCARD 15 /* WRITE ZEROES is supported */
Surely not.
>
> /* Legacy feature bits */
> #ifndef VIRTIO_BLK_NO_LEGACY
> @@ -153,6 +154,9 @@ struct virtio_blk_config {
> /* Write zeroes command */
> #define VIRTIO_BLK_T_WRITE_ZEROES 13
>
> +/* Secure discard command */
> +#define VIRTIO_BLK_T_SECDISCARD 14
> +
> #ifndef VIRTIO_BLK_NO_LEGACY
> /* Barrier before this op. */
> #define VIRTIO_BLK_T_BARRIER 0x80000000
> --
> 2.25.1
next prev parent reply other threads:[~2021-11-15 10:59 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-15 4:51 [PATCH 0/2] support BLKSECDISCARD yadong.qi
2021-11-15 4:51 ` [PATCH 1/2] block:hdev: " yadong.qi
2021-11-15 12:40 ` Kevin Wolf
2021-11-16 1:54 ` Qi, Yadong
2021-11-15 14:12 ` Stefan Hajnoczi
2021-11-16 2:03 ` Qi, Yadong
2021-11-16 10:58 ` Stefan Hajnoczi
2021-11-17 5:53 ` Christoph Hellwig
2021-11-17 10:32 ` Stefan Hajnoczi
2021-11-18 1:13 ` Qi, Yadong
2021-11-15 4:52 ` [PATCH 2/2] virtio-blk: " yadong.qi
2021-11-15 10:00 ` Stefano Garzarella
2021-11-16 1:26 ` Qi, Yadong
2021-11-15 10:57 ` Michael S. Tsirkin [this message]
2021-11-16 1:33 ` Qi, Yadong
2021-11-15 14:26 ` Stefan Hajnoczi
2021-11-16 2:13 ` Qi, Yadong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211115055630-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=fam@euphon.net \
--cc=hreitz@redhat.com \
--cc=kai.z.wang@intel.com \
--cc=kwolf@redhat.com \
--cc=luhai.chen@intel.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=yadong.qi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.