diff options
Diffstat (limited to 'drivers/usb/gadget/function/f_fs.c')
| -rw-r--r-- | drivers/usb/gadget/function/f_fs.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 3ada83d81bda..31e8bf3578c8 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c | |||
| @@ -215,7 +215,6 @@ struct ffs_io_data { | |||
| 215 | 215 | ||
| 216 | struct mm_struct *mm; | 216 | struct mm_struct *mm; |
| 217 | struct work_struct work; | 217 | struct work_struct work; |
| 218 | struct work_struct cancellation_work; | ||
| 219 | 218 | ||
| 220 | struct usb_ep *ep; | 219 | struct usb_ep *ep; |
| 221 | struct usb_request *req; | 220 | struct usb_request *req; |
| @@ -1073,31 +1072,22 @@ ffs_epfile_open(struct inode *inode, struct file *file) | |||
| 1073 | return 0; | 1072 | return 0; |
| 1074 | } | 1073 | } |
| 1075 | 1074 | ||
| 1076 | static void ffs_aio_cancel_worker(struct work_struct *work) | ||
| 1077 | { | ||
| 1078 | struct ffs_io_data *io_data = container_of(work, struct ffs_io_data, | ||
| 1079 | cancellation_work); | ||
| 1080 | |||
| 1081 | ENTER(); | ||
| 1082 | |||
| 1083 | usb_ep_dequeue(io_data->ep, io_data->req); | ||
| 1084 | } | ||
| 1085 | |||
| 1086 | static int ffs_aio_cancel(struct kiocb *kiocb) | 1075 | static int ffs_aio_cancel(struct kiocb *kiocb) |
| 1087 | { | 1076 | { |
| 1088 | struct ffs_io_data *io_data = kiocb->private; | 1077 | struct ffs_io_data *io_data = kiocb->private; |
| 1089 | struct ffs_data *ffs = io_data->ffs; | 1078 | struct ffs_epfile *epfile = kiocb->ki_filp->private_data; |
| 1090 | int value; | 1079 | int value; |
| 1091 | 1080 | ||
| 1092 | ENTER(); | 1081 | ENTER(); |
| 1093 | 1082 | ||
| 1094 | if (likely(io_data && io_data->ep && io_data->req)) { | 1083 | spin_lock_irq(&epfile->ffs->eps_lock); |
| 1095 | INIT_WORK(&io_data->cancellation_work, ffs_aio_cancel_worker); | 1084 | |
| 1096 | queue_work(ffs->io_completion_wq, &io_data->cancellation_work); | 1085 | if (likely(io_data && io_data->ep && io_data->req)) |
| 1097 | value = -EINPROGRESS; | 1086 | value = usb_ep_dequeue(io_data->ep, io_data->req); |
| 1098 | } else { | 1087 | else |
| 1099 | value = -EINVAL; | 1088 | value = -EINVAL; |
| 1100 | } | 1089 | |
| 1090 | spin_unlock_irq(&epfile->ffs->eps_lock); | ||
| 1101 | 1091 | ||
| 1102 | return value; | 1092 | return value; |
| 1103 | } | 1093 | } |
