USB: gagget: f_fs: Return error if TX req is queued during device offline
when USB cable is disconnected during TX data transfers, endpoints will be disabled during function disable. If userspace client tries to queue requests on disabled endpoints, driver will wait till endpoints are enabled and then queues previous session requests. This results in kernel driver and userspace driver out of sync and due to this, stall will be seen. Hence fix this issue by returning error value if client tries to queue requests on TX endpoint during device offline. CRs-Fixed: 633497 Change-Id: I3e43b8a704367aff7fe8dd88159315aef811c51c Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org> Signed-off-by: Mayank Rana <mrana@codeaurora.org>
This commit is contained in:
parent
42939d0685
commit
beafbd43d5
1 changed files with 8 additions and 2 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Reference in a new issue