On 07.10.20 14:14, Christoph Hellwig wrote:
> On Wed, Oct 07, 2020 at 02:09:18PM +0200, Christian Borntraeger wrote:
>> Unfortunately not. On insmodding virtio_blk I do get:
> 
> Yeah, the symbol_put needs to be conditional as well.  New version below:

Yes, this works.
> 
> diff --git a/block/partitions/ibm.c b/block/partitions/ibm.c
> index d6e18df9c53c6d..4b044e620d3534 100644
> --- a/block/partitions/ibm.c
> +++ b/block/partitions/ibm.c
> @@ -305,8 +305,6 @@ int ibm_partition(struct parsed_partitions *state)
>       if (!disk->fops->getgeo)
>               goto out_exit;
>       fn = symbol_get(dasd_biodasdinfo);
> -     if (!fn)
> -             goto out_exit;
>       blocksize = bdev_logical_block_size(bdev);
>       if (blocksize <= 0)
>               goto out_symbol;
> @@ -326,7 +324,7 @@ int ibm_partition(struct parsed_partitions *state)
>       geo->start = get_start_sect(bdev);
>       if (disk->fops->getgeo(bdev, geo))
>               goto out_freeall;
> -     if (fn(disk, info)) {
> +     if (!fn || fn(disk, info)) {
>               kfree(info);
>               info = NULL;
>       }
> @@ -370,7 +368,8 @@ int ibm_partition(struct parsed_partitions *state)
>  out_nogeo:
>       kfree(info);
>  out_symbol:
> -     symbol_put(dasd_biodasdinfo);
> +     if (fn)
> +             symbol_put(dasd_biodasdinfo);
>  out_exit:
>       return res;
>  }
> 

Reply via email to