Re: [PATCH] USB: serial: mos7720: Fix error code in mos7720_write()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 28, 2021 at 12:35:23PM +0300, Dan Carpenter wrote:
> This code should return -ENOMEM if the kmalloc() fails but instead
> it returns success.
> 
> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> ---
> The first error path is probably wrong as well?
> 
> drivers/usb/serial/mos7720.c
>   1077          /* try to find a free urb in the list */
>   1078          urb = NULL;
>   1079  
>   1080          for (i = 0; i < NUM_URBS; ++i) {
>   1081                  if (mos7720_port->write_urb_pool[i] &&
>   1082                      mos7720_port->write_urb_pool[i]->status != -EINPROGRESS) {
>   1083                          urb = mos7720_port->write_urb_pool[i];
>   1084                          dev_dbg(&port->dev, "URB:%d\n", i);
>   1085                          break;
>   1086                  }
>   1087          }
>   1088  
>   1089          if (urb == NULL) {
>   1090                  dev_dbg(&port->dev, "%s - no more free urbs\n", __func__);
>   1091                  goto exit;
> 
> Should return -ENODEV?

No, this bit is correct (modulo the missing locking and reliance on the
URB status). When there are no free URBs we want the tty layer to
retry later.

>   1092          }
> 
>  drivers/usb/serial/mos7720.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
> index ed347a6d50ba..aa55169796a3 100644
> --- a/drivers/usb/serial/mos7720.c
> +++ b/drivers/usb/serial/mos7720.c
> @@ -1094,8 +1094,10 @@ static int mos7720_write(struct tty_struct *tty, struct usb_serial_port *port,
>  	if (urb->transfer_buffer == NULL) {
>  		urb->transfer_buffer = kmalloc(URB_TRANSFER_BUFFER_SIZE,
>  					       GFP_ATOMIC);
> -		if (!urb->transfer_buffer)
> +		if (!urb->transfer_buffer) {
> +			bytes_sent = -ENOMEM;
>  			goto exit;
> +		}
>  	}
>  	transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE);

Now applied, thanks.

Johan



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux