On Wed, Nov 15, 2017 at 01:00:44PM -0800, Guenter Roeck wrote:
> It doesn't make sense to have /sys/firmware/vpd if the device is not
> instantiated, so tie its lifetime to the device.
> 
> Fixes: 049a59db34eb ("firmware: Google VPD sysfs driver")
> Signed-off-by: Guenter Roeck <[email protected]>

Reviewed-by: Dmitry Torokhov <[email protected]>

> ---
>  drivers/firmware/google/vpd.c | 19 +++++++++++++------
>  1 file changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c
> index 84217172297b..942e358efa60 100644
> --- a/drivers/firmware/google/vpd.c
> +++ b/drivers/firmware/google/vpd.c
> @@ -295,7 +295,17 @@ static int vpd_probe(struct platform_device *pdev)
>       if (ret)
>               return ret;
>  
> -     return vpd_sections_init(entry.cbmem_addr);
> +     vpd_kobj = kobject_create_and_add("vpd", firmware_kobj);
> +     if (!vpd_kobj)
> +             return -ENOMEM;
> +
> +     ret = vpd_sections_init(entry.cbmem_addr);
> +     if (ret) {
> +             kobject_put(vpd_kobj);
> +             return ret;
> +     }
> +
> +     return 0;
>  }
>  
>  static int vpd_remove(struct platform_device *pdev)
> @@ -303,6 +313,8 @@ static int vpd_remove(struct platform_device *pdev)
>       vpd_section_destroy(&ro_vpd);
>       vpd_section_destroy(&rw_vpd);
>  
> +     kobject_put(vpd_kobj);
> +
>       return 0;
>  }
>  
> @@ -322,10 +334,6 @@ static int __init vpd_platform_init(void)
>       if (IS_ERR(pdev))
>               return PTR_ERR(pdev);
>  
> -     vpd_kobj = kobject_create_and_add("vpd", firmware_kobj);
> -     if (!vpd_kobj)
> -             return -ENOMEM;
> -
>       platform_driver_register(&vpd_driver);
>  
>       return 0;
> @@ -333,7 +341,6 @@ static int __init vpd_platform_init(void)
>  
>  static void __exit vpd_platform_exit(void)
>  {
> -     kobject_put(vpd_kobj);
>  }
>  
>  module_init(vpd_platform_init);
> -- 
> 2.7.4
> 

-- 
Dmitry

Reply via email to