Hi, On 11/1/21 11:44, Andy Shevchenko wrote: > On Mon, Nov 1, 2021 at 12:31 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: >> On 10/25/21 13:31, Andy Shevchenko wrote: >>> On Mon, Oct 25, 2021 at 12:42 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > ... > >>>> +int skl_int3472_get_sensor_adev_and_name(struct device *dev, >>>> + struct acpi_device **sensor_adev_ret, >>>> + const char **name_ret) >>>> +{ >>>> + struct acpi_device *adev = ACPI_COMPANION(dev); >>>> + struct acpi_device *sensor; >>>> + int ret = 0; >>>> + >>>> + sensor = acpi_dev_get_first_consumer_dev(adev); >>>> + if (!sensor) { >>>> + dev_err(dev, "INT3472 seems to have no dependents.\n"); >>>> + return -ENODEV; >>>> + } >>>> + >>>> + *name_ret = devm_kasprintf(dev, GFP_KERNEL, I2C_DEV_NAME_FORMAT, >>>> + acpi_dev_name(sensor)); >>>> + if (!*name_ret) >>>> + ret = -ENOMEM; >>>> + >>>> + if (ret == 0 && sensor_adev_ret) >>>> + *sensor_adev_ret = sensor; >>>> + else >>>> + acpi_dev_put(sensor); >>>> + >>>> + return ret; >>> >>> The error path is twisted a bit including far staying ret=0 assignment. >>> >>> Can it be >>> >>> int ret; >>> ... >>> *name_ret = devm_kasprintf(dev, GFP_KERNEL, I2C_DEV_NAME_FORMAT, >>> acpi_dev_name(sensor)); >>> if (!*name_ret) { >>> acpi_dev_put(sensor); >>> return -ENOMEM; >>> } >>> >>> if (sensor_adev_ret) >>> *sensor_adev_ret = sensor; >>> >>> return 0; >>> >>> ? >> >> That misses an acpi_dev_put(sensor) when sensor_adev_ret == NULL. > > else > acpi_dev_put(...); Then we have 2 acpi_dev_put() paths, IMHO the original code which clearly states that we keep the ref: if (success && returning-the-ref) and put the ref in all other cases is better then having 2 separate put paths. Regards, Hans