Message ID | 20200415102445.564803-12-its@irrelevant.dk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | nvme: refactoring and cleanups | expand |
On 4/15/20 12:24 PM, Klaus Jensen wrote: > From: Klaus Jensen <k.jensen@samsung.com> > > Signed-off-by: Klaus Jensen <k.jensen@samsung.com> > --- > hw/block/nvme.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/hw/block/nvme.c b/hw/block/nvme.c > index e67f578fbf79..f0989cbb4335 100644 > --- a/hw/block/nvme.c > +++ b/hw/block/nvme.c > @@ -1348,6 +1348,17 @@ static void nvme_init_state(NvmeCtrl *n) > n->cq = g_new0(NvmeCQueue *, n->params.max_ioqpairs + 1); > } > > +static int nvme_init_blk(NvmeCtrl *n, Error **errp) > +{ > + blkconf_blocksizes(&n->conf); > + if (!blkconf_apply_backend_options(&n->conf, blk_is_read_only(n->conf.blk), > + false, errp)) { > + return -1; > + } > + > + return 0; I'm not sure this is a correct usage of the 'propagating errors' API (see CODING_STYLE.rst and include/qapi/error.h), I'd expect this function to return void, and use a local_error & error_propagate() in nvme_realize(). However this works, so: Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > +} > + > static void nvme_realize(PCIDevice *pci_dev, Error **errp) > { > NvmeCtrl *n = NVME(pci_dev); > @@ -1369,9 +1380,7 @@ static void nvme_realize(PCIDevice *pci_dev, Error **errp) > return; > } > > - blkconf_blocksizes(&n->conf); > - if (!blkconf_apply_backend_options(&n->conf, blk_is_read_only(n->conf.blk), > - false, errp)) { > + if (nvme_init_blk(n, errp)) { > return; > } > >
On Apr 15 12:52, Philippe Mathieu-Daudé wrote: > On 4/15/20 12:24 PM, Klaus Jensen wrote: > > From: Klaus Jensen <k.jensen@samsung.com> > > > > Signed-off-by: Klaus Jensen <k.jensen@samsung.com> > > --- > > hw/block/nvme.c | 15 ++++++++++++--- > > 1 file changed, 12 insertions(+), 3 deletions(-) > > > > diff --git a/hw/block/nvme.c b/hw/block/nvme.c > > index e67f578fbf79..f0989cbb4335 100644 > > --- a/hw/block/nvme.c > > +++ b/hw/block/nvme.c > > @@ -1348,6 +1348,17 @@ static void nvme_init_state(NvmeCtrl *n) > > n->cq = g_new0(NvmeCQueue *, n->params.max_ioqpairs + 1); > > } > > +static int nvme_init_blk(NvmeCtrl *n, Error **errp) > > +{ > > + blkconf_blocksizes(&n->conf); > > + if (!blkconf_apply_backend_options(&n->conf, blk_is_read_only(n->conf.blk), > > + false, errp)) { > > + return -1; > > + } > > + > > + return 0; > > I'm not sure this is a correct usage of the 'propagating errors' API (see > CODING_STYLE.rst and include/qapi/error.h), I'd expect this function to > return void, and use a local_error & error_propagate() in nvme_realize(). > > However this works, so: > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > So, I get that and did use the propagate functionality earlier. But I still used the int return. I'm not sure about the style if returning void - should I check if errp is now non-NULL? Point is that I need to return early since the later calls could fail if previous calls did not complete successfully.
On Apr 15 13:02, Klaus Birkelund Jensen wrote: > On Apr 15 12:52, Philippe Mathieu-Daudé wrote: > > On 4/15/20 12:24 PM, Klaus Jensen wrote: > > > From: Klaus Jensen <k.jensen@samsung.com> > > > > > > Signed-off-by: Klaus Jensen <k.jensen@samsung.com> > > > --- > > > hw/block/nvme.c | 15 ++++++++++++--- > > > 1 file changed, 12 insertions(+), 3 deletions(-) > > > > > > diff --git a/hw/block/nvme.c b/hw/block/nvme.c > > > index e67f578fbf79..f0989cbb4335 100644 > > > --- a/hw/block/nvme.c > > > +++ b/hw/block/nvme.c > > > @@ -1348,6 +1348,17 @@ static void nvme_init_state(NvmeCtrl *n) > > > n->cq = g_new0(NvmeCQueue *, n->params.max_ioqpairs + 1); > > > } > > > +static int nvme_init_blk(NvmeCtrl *n, Error **errp) > > > +{ > > > + blkconf_blocksizes(&n->conf); > > > + if (!blkconf_apply_backend_options(&n->conf, blk_is_read_only(n->conf.blk), > > > + false, errp)) { > > > + return -1; > > > + } > > > + > > > + return 0; > > > > I'm not sure this is a correct usage of the 'propagating errors' API (see > > CODING_STYLE.rst and include/qapi/error.h), I'd expect this function to > > return void, and use a local_error & error_propagate() in nvme_realize(). > > > > However this works, so: > > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > > > > So, I get that and did use the propagate functionality earlier. But I > still used the int return. I'm not sure about the style if returning > void - should I check if errp is now non-NULL? Point is that I need to > return early since the later calls could fail if previous calls did not > complete successfully. Nevermind, I got it. I've changed it to propagate it correctly.
diff --git a/hw/block/nvme.c b/hw/block/nvme.c index e67f578fbf79..f0989cbb4335 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1348,6 +1348,17 @@ static void nvme_init_state(NvmeCtrl *n) n->cq = g_new0(NvmeCQueue *, n->params.max_ioqpairs + 1); } +static int nvme_init_blk(NvmeCtrl *n, Error **errp) +{ + blkconf_blocksizes(&n->conf); + if (!blkconf_apply_backend_options(&n->conf, blk_is_read_only(n->conf.blk), + false, errp)) { + return -1; + } + + return 0; +} + static void nvme_realize(PCIDevice *pci_dev, Error **errp) { NvmeCtrl *n = NVME(pci_dev); @@ -1369,9 +1380,7 @@ static void nvme_realize(PCIDevice *pci_dev, Error **errp) return; } - blkconf_blocksizes(&n->conf); - if (!blkconf_apply_backend_options(&n->conf, blk_is_read_only(n->conf.blk), - false, errp)) { + if (nvme_init_blk(n, errp)) { return; }