diff options
Diffstat (limited to 'drivers/char/tty_io.c')
-rw-r--r-- | drivers/char/tty_io.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index ea18a129b0b5..59499ee0fe6a 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c | |||
@@ -1389,7 +1389,7 @@ EXPORT_SYMBOL(tty_shutdown); | |||
1389 | * of ttys that the driver keeps. | 1389 | * of ttys that the driver keeps. |
1390 | * | 1390 | * |
1391 | * This method gets called from a work queue so that the driver private | 1391 | * This method gets called from a work queue so that the driver private |
1392 | * shutdown ops can sleep (needed for USB at least) | 1392 | * cleanup ops can sleep (needed for USB at least) |
1393 | */ | 1393 | */ |
1394 | static void release_one_tty(struct work_struct *work) | 1394 | static void release_one_tty(struct work_struct *work) |
1395 | { | 1395 | { |
@@ -1397,10 +1397,9 @@ static void release_one_tty(struct work_struct *work) | |||
1397 | container_of(work, struct tty_struct, hangup_work); | 1397 | container_of(work, struct tty_struct, hangup_work); |
1398 | struct tty_driver *driver = tty->driver; | 1398 | struct tty_driver *driver = tty->driver; |
1399 | 1399 | ||
1400 | if (tty->ops->shutdown) | 1400 | if (tty->ops->cleanup) |
1401 | tty->ops->shutdown(tty); | 1401 | tty->ops->cleanup(tty); |
1402 | else | 1402 | |
1403 | tty_shutdown(tty); | ||
1404 | tty->magic = 0; | 1403 | tty->magic = 0; |
1405 | tty_driver_kref_put(driver); | 1404 | tty_driver_kref_put(driver); |
1406 | module_put(driver->owner); | 1405 | module_put(driver->owner); |
@@ -1415,6 +1414,12 @@ static void release_one_tty(struct work_struct *work) | |||
1415 | static void queue_release_one_tty(struct kref *kref) | 1414 | static void queue_release_one_tty(struct kref *kref) |
1416 | { | 1415 | { |
1417 | struct tty_struct *tty = container_of(kref, struct tty_struct, kref); | 1416 | struct tty_struct *tty = container_of(kref, struct tty_struct, kref); |
1417 | |||
1418 | if (tty->ops->shutdown) | ||
1419 | tty->ops->shutdown(tty); | ||
1420 | else | ||
1421 | tty_shutdown(tty); | ||
1422 | |||
1418 | /* The hangup queue is now free so we can reuse it rather than | 1423 | /* The hangup queue is now free so we can reuse it rather than |
1419 | waste a chunk of memory for each port */ | 1424 | waste a chunk of memory for each port */ |
1420 | INIT_WORK(&tty->hangup_work, release_one_tty); | 1425 | INIT_WORK(&tty->hangup_work, release_one_tty); |