Re: [PATCH] ALSA: ac97c: Fix an error handling path in 'atmel_ac97c_probe()'
From: Christophe JAILLET
Date: Thu Aug 31 2017 - 15:08:27 EST
Le 31/08/2017 à 12:38, Mark Brown a écrit :
On Thu, Aug 31, 2017 at 12:31:33PM +0200, Takashi Iwai wrote:
This is again a typical problem by such a trivial fix patch: the code
looks as if it were trivial and correct, buried in a patch series that
easily leads to the oversight by the maintainer's review.
Right, plus the amount of context that diff shows you.
Hi,
My proposed patch was initially triggered using coccinelle, as you must
have guessed.
In fact, I was surprised by the initial commit.
I don't have any strong opinion if testing the return value of
'clk_prepare_enable()' is relevant or not, but I was surprised that the
error handling path had not been updated at the same time.
So, before posting my patch, I have searched a bit in git history and it
gave:
git shortlog --author="Arvind Yadav" | grep clk_prepare
ata: sata_rcar: Handle return value of clk_prepare_enable
hwrng: omap3-rom - Handle return value of clk_prepare_enable
crypto: img-hash - Handle return value of clk_prepare_enable
dmaengine: DW DMAC: Handle return value of clk_prepare_enable
gpio: davinci: Handle return value of clk_prepare_enable
cpufreq: kirkwood-cpufreq:- Handle return value of
clk_prepare_enable()
dmaengine: imx-sdma: Handle return value of clk_prepare_enable
Input: s3c2410_ts - handle return value of clk_prepare_enable
iio: adc: xilinx: Handle return value of clk_prepare_enable
iio:adc:lpc32xx Handle return value of clk_prepare_enable
memory: ti-aemif: Handle return value of clk_prepare_enable
spi: davinci: Handle return value of clk_prepare_enable
[media] tc358743: Handle return value of clk_prepare_enable
mtd: nand: orion: Handle return value of clk_prepare_enable
iio: Aspeed ADC - Handle return value of clk_prepare_enable
PM / devfreq: exynos-nocp: Handle return value of clk_prepare_enable
PM / devfreq: exynos-ppmu: Handle return value of clk_prepare_enable
usb: host: ehci-exynos: Handle return value of clk_prepare_enable
usb: mtu3: Handle return value of clk_prepare_enable
usb: mtu3: Handle return value of clk_prepare_enable
video: fbdev: pxafb: Handle return value of clk_prepare_enable
usb: gadget: mv_udc: Handle return value of clk_prepare_enable.
usb: dwc3: exynos: Handle return value of clk_prepare_enable
i2c: at91: Handle return value of clk_prepare_enable
i2c: emev2: Handle return value of clk_prepare_enable
usb: host: ohci-pxa27x: Handle return value of clk_prepare_enable
thermal: imx: Handle return value of clk_prepare_enable
thermal: hisilicon: Handle return value of clk_prepare_enable
PCI: rockchip: Check for clk_prepare_enable() errors during resume
watchdog: meson: Handle return value of clk_prepare_enable
watchdog: davinci: Handle return value of clk_prepare_enable
mfd: tc6393xb: Handle return value of clk_prepare_enable
ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.
ASoC: samsung: s3c24xx: Handle return value of clk_prepare_enable.
ASoC: samsung: pcm: Handle return value of clk_prepare_enable.
ASoC: samsung: i2s: Handle return value of clk_prepare_enable.
ASoC: samsung: spdif: Handle return value of clk_prepare_enable.
ASoC: mxs-saif: Handle return value of
clk_prepare_enable/clk_prepare.
ASoC: jz4740: Handle return value of clk_prepare_enable.
ASoC: sun4i-spdif: Handle return value of clk_prepare_enable.
ASoC: atmel: ac97c: Handle return value of clk_prepare_enable.
gpio: mb86s7x: Handle return value of clk_prepare_enable.
memory: mtk-smi: Handle return value of clk_prepare_enable
mmc: sdhci-st: Handle return value of clk_prepare_enable
mmc: wmt-sdmmc: Handle return value of clk_prepare_enable
mmc: mxcmmc: Handle return value of clk_prepare_enable
dmaengine: at_xdmac: Handle return value of clk_prepare_enable.
mtd: nand: denali: Handle return value of clk_prepare_enable.
mtd: oxnas_nand: Handle clk_prepare_enable/clk_disable_unprepare.
mtd: nand: lpc32xx_slc: Handle return value of clk_prepare_enable.
mtd: nand: lpc32xx_mlc: Handle return value of clk_prepare_enable.
mtd: st_spi_fsm: Handle clk_prepare_enable/clk_disable_unprepare.
Some of these are after a devm_clk_get(), which does not require a
modification in the error handling path (at least according to the one
I've looked at)
Some don't have any [devm_]clk_get() in the same function, and were not
investigated further.
But several also had the same construction as the one reported in this
thread, and needed, IMHO, an update of the error handling path to call
through clk_put().
It was "too" surprising to me to have "all" these "obviously" incomplete
patches merged.
I thought that I had missed something obvious and decided to propose one
fix to see the reaction (and didn't expected all your replies!)
So now, I think we should go through the commits above to either revert
the commit and remove the test (and document why it is not needed) or
fix the error handling path accordingly, even if one could know that it
cant' happen.
CJ