> The Linux block layer shares the DISCARD queue limits with SECDISCARD.
> That's different from BLKZEROOUT (QEMU's WRITE_ZEROES). This is a Linux
> implementation detail but I guess virtio-blk can share the DISCARD limits with
> SECDISCARD too...
> 
> > @@ -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));
> 
> The DISCARD case doesn't use __attribute__((fallthrough)) so this is 
> inconsistent.
> QEMU doesn't use __attribute__((fallthrough)) so I suggest dropping this.
Sure, will try to drop the fallthrough case.

> 
> > 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
> */
> 
> The comment is copy-pasted from WRITE_ZEROES.
Will fix it.

Reply via email to