media: vb2: Return queued buffers from start_streaming() on error
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest6 patches 0 repliesNew
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/6 | media: airspy: Return queued buffers on start_streaming() failuredrivers/ | +5 | 0 replies | |
| 2/6 | media: msi2500: Return queued buffers on start_streaming() failuredrivers/ | +24 | 0 replies | |
| 3/6 | media: pwc: Return queued buffers on start_streaming() failuredrivers/ | +6 | 0 replies | |
| 4/6 | media: rtl2832_sdr: Return queued buffers on start_streaming() failuredrivers/ | +14 | 0 replies | |
| 5/6 | media: stm32-dcmipp: Return queued buffers on start_streaming() failuredrivers/ | +4 | 0 replies | |
| 6/6 | media: sun4i-csi: Return queued buffers on start_streaming() failuredrivers/ | +4 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [PATCH 0/6] media: vb2: Return queued buffers from start_streaming() on error
The vb2 framework hands buffer ownership to the driver via buf_queue() before calling start_streaming(). If start_streaming() returns an error without first returning those buffers via vb2_buffer_done(), vb2_start_streaming() fires WARN_ON(owned_by_drv_count != 0) and the queued buffers leak.
This was previously fixed for uvcvideo in commit 4cf3b6fd54eb ("media:
uvcvideo: Return queued buffers on start_streaming() failure"). The same pattern exists in six sibling drivers that still return an errno early (USB disconnect, signal-interrupted mutex, or media-graph / format lookup failure) without draining their internal queued-buffer list. Each patch reuses or extends the helper / cleanup label that the driver's other error paths already use.
airspy.c - moves mutex_lock above the !s->udev check and
jumps to the existing err_clear_bit label, which already drains s->queued_bufs.
msi2500.c - rebuilds start_streaming into a goto chain that
drains the queue on every failure (including previously-masked set_usb_adc / ctrl_msg paths); parameterizes msi2500_cleanup_queued_bufs() with vb2_buffer_state so the start_streaming path passes _QUEUED. Rolls back isoc_init via msi2500_isoc_cleanup() on ctrl_msg failure.
pwc-if.c - calls pwc_cleanup_queued_bufs(.., _QUEUED) before
each early return; state matches the existing pwc_isoc_init() error-path in the same function.
rtl2832_sdr.c - calls rtl2832_sdr_cleanup_queued_bufs() before
each early return and at the err label. Adds an explicit success return so the cleanup at err no longer runs on the success path. Parameterizes the helper with vb2_buffer_state.
dcmipp-bytecap.c - replaces the bare -EINVAL return for failed
subdev lookup with a goto err_buffer_done.
sun4i_dma.c - replaces the bare -EINVAL return for failed
csi-format lookup with a goto err_clear_dma_queue.
These sites were located by a Coccinelle pattern that matches return -ERRNO inside a start_streaming(struct vb2_queue *, unsigned int) callback without a preceding vb2_buffer_done() on the same path.
Build-tested with drivers/media/ allmodconfig. Not runtime-tested on any of the six devices. Maintainers with hardware are kindly asked to verify nothing regresses on their device.
Valery Borovsky (6):
media: airspy: Return queued buffers on start_streaming() failure
media: msi2500: Return queued buffers on start_streaming() failure
media: pwc: Return queued buffers on start_streaming() failure
media: rtl2832_sdr: Return queued buffers on start_streaming() failure
media: stm32-dcmipp: Return queued buffers on start_streaming()
failure
media: sun4i-csi: Return queued buffers on start_streaming() failure
drivers/media/dvb-frontends/rtl2832_sdr.c | 19 ++++++++--- .../st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 6 ++-- .../platform/sunxi/sun4i-csi/sun4i_dma.c | 6 ++-- drivers/media/usb/airspy/airspy.c | 8 +++-- drivers/media/usb/msi2500/msi2500.c | 32 ++++++++++++++----- drivers/media/usb/pwc/pwc-if.c | 8 +++-- 6 files changed, 57 insertions(+), 22 deletions(-)
Signature · 1 line
2.51.0