From 464b79c1a966f164c7cd185e17c6fd4dc489bf48 Mon Sep 17 00:00:00 2001 From: Luan Yuan Date: Fri, 19 Oct 2018 16:03:25 +0800 Subject: [PATCH] Revert "usb: adb reboot and then adb disconnect[1/1]" This reverts commit 7fb9d732feb64946f280ee4843527cb5095c97ef. Change-Id: Ie5aad3c54ddfe0ab56f19b1f9f8e32dfe9c92dd6 Signed-off-by: Luan Yuan --- drivers/usb/gadget/function/f_fs.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index cb76db3..055c03a 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -848,9 +848,7 @@ static void ffs_user_copy_worker(struct work_struct *work) if (io_data->read) kfree(io_data->to_free); -#ifndef CONFIG_AMLOGIC_USB kfree(io_data->buf); -#endif kfree(io_data); } @@ -954,6 +952,7 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) #ifdef CONFIG_AMLOGIC_USB struct ffs_ep *ep = epfile->ep; struct ffs_data_buffer *buffer = NULL; + int data_flag = -1; #else struct ffs_ep *ep; #endif @@ -1035,6 +1034,15 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) goto error_mutex; } #else + if (io_data->aio) { + spin_unlock_irq(&epfile->ffs->eps_lock); + data = kmalloc(data_len, GFP_KERNEL); + data_flag = 1; + if (unlikely(!data)) { + ret = -ENOMEM; + goto error_mutex; + } + } else { /* Fire the request */ /* * Avoid kernel panic caused by race condition. For example, @@ -1052,9 +1060,9 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) * To avoid this, during FunctionFS mount, we allocated the * data buffer for requests. And the memory resources has * been released in kill_sb. - *reboot adb disconnect,so buffer aways used assign_ffs_buffer. */ buffer = assign_ffs_buffer(epfile->ffs); + data_flag = -1; if (unlikely(!buffer)) { ret = -ENOMEM; spin_unlock_irq(&epfile->ffs->eps_lock); @@ -1063,6 +1071,7 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) data = buffer->data_ep; spin_unlock_irq(&epfile->ffs->eps_lock); + } #endif if (!io_data->read && @@ -1168,8 +1177,13 @@ error_mutex: mutex_unlock(&epfile->mutex); error: #ifdef CONFIG_AMLOGIC_USB - if (buffer) - release_ffs_buffer(epfile->ffs, buffer); + if (data_flag > 0) { + kfree(data); + data = NULL; + } else { + if (buffer) + release_ffs_buffer(epfile->ffs, buffer); + } #else kfree(data); #endif -- 2.7.4