diff options
Diffstat (limited to 'drivers/usb/serial/safe_serial.c')
-rw-r--r-- | drivers/usb/serial/safe_serial.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c index ad12e9e2c7ee..21cd7bf2a8cc 100644 --- a/drivers/usb/serial/safe_serial.c +++ b/drivers/usb/serial/safe_serial.c | |||
@@ -207,38 +207,31 @@ static void safe_process_read_urb(struct urb *urb) | |||
207 | unsigned char *data = urb->transfer_buffer; | 207 | unsigned char *data = urb->transfer_buffer; |
208 | unsigned char length = urb->actual_length; | 208 | unsigned char length = urb->actual_length; |
209 | int actual_length; | 209 | int actual_length; |
210 | struct tty_struct *tty; | ||
211 | __u16 fcs; | 210 | __u16 fcs; |
212 | 211 | ||
213 | if (!length) | 212 | if (!length) |
214 | return; | 213 | return; |
215 | 214 | ||
216 | tty = tty_port_tty_get(&port->port); | ||
217 | if (!tty) | ||
218 | return; | ||
219 | |||
220 | if (!safe) | 215 | if (!safe) |
221 | goto out; | 216 | goto out; |
222 | 217 | ||
223 | fcs = fcs_compute10(data, length, CRC10_INITFCS); | 218 | fcs = fcs_compute10(data, length, CRC10_INITFCS); |
224 | if (fcs) { | 219 | if (fcs) { |
225 | dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs); | 220 | dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs); |
226 | goto err; | 221 | return; |
227 | } | 222 | } |
228 | 223 | ||
229 | actual_length = data[length - 2] >> 2; | 224 | actual_length = data[length - 2] >> 2; |
230 | if (actual_length > (length - 2)) { | 225 | if (actual_length > (length - 2)) { |
231 | dev_err(&port->dev, "%s - inconsistent lengths %d:%d\n", | 226 | dev_err(&port->dev, "%s - inconsistent lengths %d:%d\n", |
232 | __func__, actual_length, length); | 227 | __func__, actual_length, length); |
233 | goto err; | 228 | return; |
234 | } | 229 | } |
235 | dev_info(&urb->dev->dev, "%s - actual: %d\n", __func__, actual_length); | 230 | dev_info(&urb->dev->dev, "%s - actual: %d\n", __func__, actual_length); |
236 | length = actual_length; | 231 | length = actual_length; |
237 | out: | 232 | out: |
238 | tty_insert_flip_string(&port->port, data, length); | 233 | tty_insert_flip_string(&port->port, data, length); |
239 | tty_flip_buffer_push(tty); | 234 | tty_flip_buffer_push(&port->port); |
240 | err: | ||
241 | tty_kref_put(tty); | ||
242 | } | 235 | } |
243 | 236 | ||
244 | static int safe_prepare_write_buffer(struct usb_serial_port *port, | 237 | static int safe_prepare_write_buffer(struct usb_serial_port *port, |