]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - drivers/usb/gadget/function/f_fs.c
Merge tag 'v4.0.8' into xlnx_4.0.8-rt6
[zynq/linux.git] / drivers / usb / gadget / function / f_fs.c
index 175c9956cbe3a36949526029103d38b4c97225c3..ce3b40734a864f8a7835f054bd4f26b18702e8ae 100644 (file)
@@ -845,7 +845,7 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
                                ret = ep->status;
                                if (io_data->read && ret > 0) {
                                        ret = copy_to_iter(data, ret, &io_data->data);
-                                       if (unlikely(iov_iter_count(&io_data->data)))
+                                       if (!ret)
                                                ret = -EFAULT;
                                }
                        }
@@ -3433,6 +3433,7 @@ done:
 static void ffs_closed(struct ffs_data *ffs)
 {
        struct ffs_dev *ffs_obj;
+       struct f_fs_opts *opts;
 
        ENTER();
        ffs_dev_lock();
@@ -3446,8 +3447,13 @@ static void ffs_closed(struct ffs_data *ffs)
        if (ffs_obj->ffs_closed_callback)
                ffs_obj->ffs_closed_callback(ffs);
 
-       if (!ffs_obj->opts || ffs_obj->opts->no_configfs
-           || !ffs_obj->opts->func_inst.group.cg_item.ci_parent)
+       if (ffs_obj->opts)
+               opts = ffs_obj->opts;
+       else
+               goto done;
+
+       if (opts->no_configfs || !opts->func_inst.group.cg_item.ci_parent
+           || !atomic_read(&opts->func_inst.group.cg_item.ci_kref.refcount))
                goto done;
 
        unregister_gadget_item(ffs_obj->opts->