summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/function/f_fs.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index eb2409dda50d..19d6a997ee6c 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -760,8 +760,8 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
ssize_t ret, data_len = -EINVAL;
int halt;
- ffs_log("enter: epfile name %s epfile err %d", epfile->name,
- atomic_read(&epfile->error));
+ ffs_log("enter: epfile name %s epfile err %d (%s)", epfile->name,
+ atomic_read(&epfile->error), io_data->read ? "READ" : "WRITE");
smp_mb__before_atomic();
if (atomic_read(&epfile->error))
@@ -781,6 +781,12 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
goto error;
}
+ /* Don't wait on write if device is offline */
+ if (!io_data->read) {
+ ret = -EINTR;
+ goto error;
+ }
+
/*
* If ep is disabled, this fails all current IOs
* and wait for next epfile open to happen.