diff options
Diffstat (limited to 'drivers/usb/gadget/function/f_fs.c')
-rw-r--r-- | drivers/usb/gadget/function/f_fs.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 3507f880eb74..6e7be91e6097 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c | |||
@@ -924,7 +924,8 @@ static ssize_t ffs_epfile_write_iter(struct kiocb *kiocb, struct iov_iter *from) | |||
924 | 924 | ||
925 | kiocb->private = p; | 925 | kiocb->private = p; |
926 | 926 | ||
927 | kiocb_set_cancel_fn(kiocb, ffs_aio_cancel); | 927 | if (p->aio) |
928 | kiocb_set_cancel_fn(kiocb, ffs_aio_cancel); | ||
928 | 929 | ||
929 | res = ffs_epfile_io(kiocb->ki_filp, p); | 930 | res = ffs_epfile_io(kiocb->ki_filp, p); |
930 | if (res == -EIOCBQUEUED) | 931 | if (res == -EIOCBQUEUED) |
@@ -968,7 +969,8 @@ static ssize_t ffs_epfile_read_iter(struct kiocb *kiocb, struct iov_iter *to) | |||
968 | 969 | ||
969 | kiocb->private = p; | 970 | kiocb->private = p; |
970 | 971 | ||
971 | kiocb_set_cancel_fn(kiocb, ffs_aio_cancel); | 972 | if (p->aio) |
973 | kiocb_set_cancel_fn(kiocb, ffs_aio_cancel); | ||
972 | 974 | ||
973 | res = ffs_epfile_io(kiocb->ki_filp, p); | 975 | res = ffs_epfile_io(kiocb->ki_filp, p); |
974 | if (res == -EIOCBQUEUED) | 976 | if (res == -EIOCBQUEUED) |
@@ -3435,6 +3437,7 @@ done: | |||
3435 | static void ffs_closed(struct ffs_data *ffs) | 3437 | static void ffs_closed(struct ffs_data *ffs) |
3436 | { | 3438 | { |
3437 | struct ffs_dev *ffs_obj; | 3439 | struct ffs_dev *ffs_obj; |
3440 | struct f_fs_opts *opts; | ||
3438 | 3441 | ||
3439 | ENTER(); | 3442 | ENTER(); |
3440 | ffs_dev_lock(); | 3443 | ffs_dev_lock(); |
@@ -3449,8 +3452,13 @@ static void ffs_closed(struct ffs_data *ffs) | |||
3449 | ffs_obj->ffs_closed_callback) | 3452 | ffs_obj->ffs_closed_callback) |
3450 | ffs_obj->ffs_closed_callback(ffs); | 3453 | ffs_obj->ffs_closed_callback(ffs); |
3451 | 3454 | ||
3452 | if (!ffs_obj->opts || ffs_obj->opts->no_configfs | 3455 | if (ffs_obj->opts) |
3453 | || !ffs_obj->opts->func_inst.group.cg_item.ci_parent) | 3456 | opts = ffs_obj->opts; |
3457 | else | ||
3458 | goto done; | ||
3459 | |||
3460 | if (opts->no_configfs || !opts->func_inst.group.cg_item.ci_parent | ||
3461 | || !atomic_read(&opts->func_inst.group.cg_item.ci_kref.refcount)) | ||
3454 | goto done; | 3462 | goto done; |
3455 | 3463 | ||
3456 | unregister_gadget_item(ffs_obj->opts-> | 3464 | unregister_gadget_item(ffs_obj->opts-> |