On Wed, May 12, 2021 at 07:28:16PM +0200, Hannes Reinecke wrote: > On 5/12/21 7:20 PM, Luis Chamberlain wrote: > > On Wed, May 12, 2021 at 07:12:03PM +0200, Hannes Reinecke wrote: > > > On 5/12/21 6:47 PM, Luis Chamberlain wrote: > > > > On Wed, May 12, 2021 at 05:16:39PM +0200, Hannes Reinecke wrote: > > > > > On 5/12/21 8:46 AM, Luis Chamberlain wrote: > > > > > > We never checked for errors on add_disk() as this function > > > > > > returned void. Now that this is fixed, use the shiny new > > > > > > error handling. > > > > > > > > > > > > Signed-off-by: Luis Chamberlain <mcgrof@xxxxxxxxxx> > > > > > > --- > > > > > > drivers/block/null_blk/main.c | 9 +++++++-- > > > > > > 1 file changed, 7 insertions(+), 2 deletions(-) > > > > > > > > > > > > diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c > > > > > > index 5f006d9e1472..2346d1292b26 100644 > > > > > > --- a/drivers/block/null_blk/main.c > > > > > > +++ b/drivers/block/null_blk/main.c > > > > > > @@ -1699,6 +1699,7 @@ static int init_driver_queues(struct nullb *nullb) > > > > > > static int null_gendisk_register(struct nullb *nullb) > > > > > > { > > > > > > + int ret; > > > > > > sector_t size = ((sector_t)nullb->dev->size * SZ_1M) >> SECTOR_SHIFT; > > > > > > struct gendisk *disk; > > > > > > @@ -1719,13 +1720,17 @@ static int null_gendisk_register(struct nullb *nullb) > > > > > > strncpy(disk->disk_name, nullb->disk_name, DISK_NAME_LEN); > > > > > > if (nullb->dev->zoned) { > > > > > > - int ret = null_register_zoned_dev(nullb); > > > > > > + ret = null_register_zoned_dev(nullb); > > > > > > if (ret) > > > > > > return ret; > > > > > > } > > > > > > - add_disk(disk); > > > > > > + ret = add_disk(disk); > > > > > > + if (ret) { > > > > > > > > > > unregister_zoned_device() ? > > > > > > > > That function does not exist, do you mean null_free_zoned_dev()? If so > > > > that is done by the caller. > > > > > > > What I intended to say is that you are calling 'null_register_zoned_dev()' > > > at one point, but don't call a cleanup function if there is an error later > > > in the path, leaving the caller to guess whether null_register_zoned_dev() > > > has been called or not. > > > So we should call the cleanup function here, too. > > > > The cleanup for zone stuff is done on the caller. > > > My point being: how does he know? The person who is maintainer of the code would. > The zone stuff might or might not be initialized. > Why not do the cleanup action in the error path of this function? Because its not currently allocated in that function, its done in the caller function. Luis