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 | } |