usb: clean up some of the computations in adu_read
Replace ?: with min to calculate the number of bytes in the secondary buffer, including changing the data type of data_in_secondary to size_t to be type-consistent. data_in_secondary can never be negative. Remove some spurious calculations (copy_to_user returns zero on success), making one variable redundant (i) This change does not alter the functionality of the code. Signed-off-by: Daniel M German <dmg@turingmachine.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
235e6e0a8d
commit
4850f26abf
|
@ -343,7 +343,6 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
|
|||
struct adu_device *dev;
|
||||
size_t bytes_read = 0;
|
||||
size_t bytes_to_read = count;
|
||||
int i;
|
||||
int retval = 0;
|
||||
int timeout = 0;
|
||||
int should_submit = 0;
|
||||
|
@ -371,23 +370,22 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
|
|||
timeout = COMMAND_TIMEOUT;
|
||||
dev_dbg(&dev->udev->dev, "%s : about to start looping\n", __func__);
|
||||
while (bytes_to_read) {
|
||||
int data_in_secondary = dev->secondary_tail - dev->secondary_head;
|
||||
size_t data_in_secondary = dev->secondary_tail - dev->secondary_head;
|
||||
dev_dbg(&dev->udev->dev,
|
||||
"%s : while, data_in_secondary=%d, status=%d\n",
|
||||
"%s : while, data_in_secondary=%zu, status=%d\n",
|
||||
__func__, data_in_secondary,
|
||||
dev->interrupt_in_urb->status);
|
||||
|
||||
if (data_in_secondary) {
|
||||
/* drain secondary buffer */
|
||||
int amount = bytes_to_read < data_in_secondary ? bytes_to_read : data_in_secondary;
|
||||
i = copy_to_user(buffer, dev->read_buffer_secondary+dev->secondary_head, amount);
|
||||
if (i) {
|
||||
size_t amount = min(bytes_to_read, data_in_secondary);
|
||||
if (copy_to_user(buffer, dev->read_buffer_secondary+dev->secondary_head, amount)) {
|
||||
retval = -EFAULT;
|
||||
goto exit;
|
||||
}
|
||||
dev->secondary_head += (amount - i);
|
||||
bytes_read += (amount - i);
|
||||
bytes_to_read -= (amount - i);
|
||||
dev->secondary_head += amount;
|
||||
bytes_read += amount;
|
||||
bytes_to_read -= amount;
|
||||
} else {
|
||||
/* we check the primary buffer */
|
||||
spin_lock_irqsave (&dev->buflock, flags);
|
||||
|
|
Loading…
Reference in New Issue
Block a user