mirror_ubuntu-kernels/drivers/usb/gadget/function
Pavankumar Kondeti c76ef96fc0 usb: gadget: f_fs: Use stream_open() for endpoint files
Function fs endpoint file operations are synchronized via an interruptible
mutex wait. However we see threads that do ep file operations concurrently
are getting blocked for the mutex lock in __fdget_pos(). This is an
uninterruptible wait and we see hung task warnings and kernel panic
if hung_task_panic systcl is enabled if host does not send/receive
the data for long time.

The reason for threads getting blocked in __fdget_pos() is due to
the file position protection introduced by the commit 9c225f2655
("vfs: atomic f_pos accesses as per POSIX"). Since function fs
endpoint files does not have the notion of the file position, switch
to the stream mode. This will bypass the file position mutex and
threads will be blocked in interruptible state for the function fs
mutex.

It should not affects user space as we are only changing the task state
changes the task state from UNINTERRUPTIBLE to INTERRUPTIBLE while waiting
for the USB transfers to be finished. However there is a slight change to
the O_NONBLOCK behavior. Earlier threads that are using O_NONBLOCK are also
getting blocked inside fdget_pos(). Now they reach to function fs and error
code is returned. The non blocking behavior is actually honoured now.

Reviewed-by: John Keeping <john@metanate.com>
Signed-off-by: Pavankumar Kondeti <quic_pkondeti@quicinc.com>
Link: https://lore.kernel.org/r/1636712682-1226-1-git-send-email-quic_pkondeti@quicinc.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-11-17 14:34:42 +01:00
..
f_acm.c USB: gadget: f_acm: add support for SuperSpeed Plus 2020-12-10 16:12:20 +01:00
f_ecm.c usb: fix various gadgets null ptr deref on 10gbps cabling. 2021-06-09 10:37:13 +02:00
f_eem.c usb: gadget: eem: fix echo command packet response issue 2021-06-21 11:27:22 +02:00
f_fs.c usb: gadget: f_fs: Use stream_open() for endpoint files 2021-11-17 14:34:42 +01:00
f_hid.c usb: gadget: f_hid: optional SETUP/SET_REPORT mode 2021-08-24 15:41:08 +02:00
f_loopback.c usb: fix various gadgets null ptr deref on 10gbps cabling. 2021-06-09 10:37:13 +02:00
f_mass_storage.c usb: gadget: f_mass_storage: Disable eps during disconnect 2021-10-30 10:55:55 +02:00
f_mass_storage.h
f_midi.c usb/gadget: f_midi: Replace tasklet with work 2021-01-12 12:52:28 +01:00
f_ncm.c usb: gadget: f_ncm: ncm_wrap_ntb - move var definitions into if statement 2021-07-21 10:04:19 +02:00
f_obex.c
f_phonet.c net: remove single-byte netdev->dev_addr writes 2021-10-13 10:03:59 -07:00
f_printer.c Linux 5.13-rc6 2021-06-14 09:18:07 +02:00
f_rndis.c usb: fix various gadgets null ptr deref on 10gbps cabling. 2021-06-09 10:37:13 +02:00
f_serial.c usb: fix various gadgets null ptr deref on 10gbps cabling. 2021-06-09 10:37:13 +02:00
f_sourcesink.c usb: fix various gadgets null ptr deref on 10gbps cabling. 2021-06-09 10:37:13 +02:00
f_subset.c usb: fix various gadgets null ptr deref on 10gbps cabling. 2021-06-09 10:37:13 +02:00
f_tcm.c scsi: target: usb: Replace enable attr with ops.enable 2021-10-04 23:27:39 -04:00
f_uac1_legacy.c
f_uac1.c usb:gadget: f_uac1: fixed sync playback 2021-10-25 09:19:21 +02:00
f_uac2.c usb:gadget: f_uac1: fixed sync playback 2021-10-25 09:19:21 +02:00
f_uvc.c usb: gadget: uvc: ensure the vdev is unset 2021-10-21 12:58:57 +02:00
f_uvc.h
g_zero.h
Makefile
ndis.h
rndis.c
rndis.h
storage_common.c block: remove i_bdev 2020-12-01 14:53:39 -07:00
storage_common.h
tcm.h
u_audio.c usb: gadget: u_audio.c: Adding Playback Pitch ctl for sync playback 2021-10-13 13:59:43 +02:00
u_audio.h usb:gadget: f_uac1: fixed sync playback 2021-10-25 09:19:21 +02:00
u_ecm.h
u_eem.h
u_ether_configfs.h USB: gadget: u_ether: Fix a configfs return code 2021-03-10 09:36:12 +01:00
u_ether.c usb: gadget: u_ether: use eth_hw_addr_set() 2021-10-20 19:31:50 +02:00
u_ether.h usb: gadget: u_ether: support configuring interface names. 2021-01-15 16:08:53 +01:00
u_fs.h
u_gether.h
u_hid.h usb: gadget: f_hid: optional SETUP/SET_REPORT mode 2021-08-24 15:41:08 +02:00
u_midi.h usb: gadget: function: Fix inconsistent indent 2021-05-10 11:16:10 +02:00
u_ncm.h
u_phonet.h
u_printer.h
u_rndis.h
u_serial.c Merge 5.14-rc5 into tty-next 2021-08-09 08:52:46 +02:00
u_serial.h
u_tcm.h
u_uac1_legacy.c
u_uac1_legacy.h
u_uac1.h usb: gadget: f_uac1: add volume and mute support 2021-07-21 10:10:11 +02:00
u_uac2.h usb:gadget: f_uac1: fixed sync playback 2021-10-25 09:19:21 +02:00
u_uvc.h
uvc_configfs.c usb: gadget: Drop unnecessary NULL checks after container_of 2021-05-10 11:16:10 +02:00
uvc_configfs.h
uvc_queue.c usb: gadget: uvc: implement dwPresentationTime and scrSourceClock 2021-10-25 09:20:08 +02:00
uvc_queue.h usb: gadget: uvc: add scatter gather support 2021-07-27 15:59:19 +02:00
uvc_v4l2.c usb: gadget: uvc: only schedule stream in streaming state 2021-10-21 12:58:34 +02:00
uvc_v4l2.h
uvc_video.c usb: gadget: uvc: implement dwPresentationTime and scrSourceClock 2021-10-25 09:20:08 +02:00
uvc_video.h usb: gadget: uvc: consistently use define for headerlen 2021-10-21 12:53:31 +02:00
uvc.h usb: gadget: uvc: implement dwPresentationTime and scrSourceClock 2021-10-25 09:20:08 +02:00