aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/function/f_fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/function/f_fs.c')
-rw-r--r--drivers/usb/gadget/function/f_fs.c16
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:
3435static void ffs_closed(struct ffs_data *ffs) 3437static 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->