From 8d61117a9783ca89e8ce41c382fcdcee0876f7e0 Mon Sep 17 00:00:00 2001 From: Linyu Yuan Date: Mon, 9 Nov 2020 11:02:10 +0800 Subject: [PATCH] f_fs: fix scheduling while atomic issue of ffs_epfile_io() move wait_for_completion() outside of spinlock. Change-Id: Ib4cb7058aa96a55be40e757434ac64327264f104 Signed-off-by: Linyu Yuan --- drivers/usb/gadget/function/f_fs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index ec06a1157f51..94a0d91fafa0 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -1185,10 +1185,12 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) interrupted = true; if (ep->ep) { usb_ep_dequeue(ep->ep, req); + spin_unlock_irq(&epfile->ffs->eps_lock); wait_for_completion(&done); interrupted = ep->status < 0; + } else { + spin_unlock_irq(&epfile->ffs->eps_lock); } - spin_unlock_irq(&epfile->ffs->eps_lock); } ffs_log("%s:ep status %d for req %pK", epfile->name, ep->status,