[media] stk1160: Handle urb allocation failure condition properly
When an urb buffer can't be allocated, the currently allocated buffer count must be saved so they can properly released. Moreover, it's sufficient to call stk1160_free_isoc to have all urb buffers released. Signed-off-by: Ezequiel Garcia <elezegarcia@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
18ad89659a
commit
065741840b
|
@ -462,8 +462,7 @@ int stk1160_alloc_isoc(struct stk1160 *dev)
|
|||
urb = usb_alloc_urb(max_packets, GFP_KERNEL);
|
||||
if (!urb) {
|
||||
stk1160_err("cannot alloc urb[%d]\n", i);
|
||||
stk1160_uninit_isoc(dev);
|
||||
return -ENOMEM;
|
||||
goto free_i_bufs;
|
||||
}
|
||||
dev->isoc_ctl.urb[i] = urb;
|
||||
|
||||
|
@ -474,10 +473,9 @@ int stk1160_alloc_isoc(struct stk1160 *dev)
|
|||
dev->isoc_ctl.transfer_buffer[i] = kmalloc(sb_size, GFP_KERNEL);
|
||||
#endif
|
||||
if (!dev->isoc_ctl.transfer_buffer[i]) {
|
||||
stk1160_err("cannot alloc %d bytes for tx buffer\n",
|
||||
sb_size);
|
||||
stk1160_uninit_isoc(dev);
|
||||
return -ENOMEM;
|
||||
stk1160_err("cannot alloc %d bytes for tx[%d] buffer\n",
|
||||
sb_size, i);
|
||||
goto free_i_bufs;
|
||||
}
|
||||
memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size);
|
||||
|
||||
|
@ -514,5 +512,11 @@ int stk1160_alloc_isoc(struct stk1160 *dev)
|
|||
dev->isoc_ctl.num_bufs = num_bufs;
|
||||
|
||||
return 0;
|
||||
|
||||
free_i_bufs:
|
||||
/* Save the allocated buffers so far, so we can properly free them */
|
||||
dev->isoc_ctl.num_bufs = i+1;
|
||||
stk1160_free_isoc(dev);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue