diff options
author | Dan Carpenter <error27@gmail.com> | 2006-12-13 03:35:09 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-13 12:05:53 -0500 |
commit | b3f13debd593dbd7242a4ecf6c9b4d529805e5a0 (patch) | |
tree | d37de63bd6809b14fe789195706b754f11de2254 /drivers/char | |
parent | a2db8dfce8d94fecae50128d912fec7980687a51 (diff) |
[PATCH] tty_io.c balance tty_ldisc_ref()
tty_ldisc_deref() should only be called when tty_ldisc_ref() succeeds
otherwise it triggers a BUG(). There's already a function
tty_ldisc_flush() that flushes properly.
Signed-off-by: Dan Carpenter <error27@gmail.com>
Acked-by: Alan Cox <alan@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/tty_io.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index a928f6af52f2..47a6eacb10bc 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c | |||
@@ -3335,18 +3335,13 @@ static void __do_SAK(struct work_struct *work) | |||
3335 | int session; | 3335 | int session; |
3336 | int i; | 3336 | int i; |
3337 | struct file *filp; | 3337 | struct file *filp; |
3338 | struct tty_ldisc *disc; | ||
3339 | struct fdtable *fdt; | 3338 | struct fdtable *fdt; |
3340 | 3339 | ||
3341 | if (!tty) | 3340 | if (!tty) |
3342 | return; | 3341 | return; |
3343 | session = tty->session; | 3342 | session = tty->session; |
3344 | 3343 | ||
3345 | /* We don't want an ldisc switch during this */ | 3344 | tty_ldisc_flush(tty); |
3346 | disc = tty_ldisc_ref(tty); | ||
3347 | if (disc && disc->flush_buffer) | ||
3348 | disc->flush_buffer(tty); | ||
3349 | tty_ldisc_deref(disc); | ||
3350 | 3345 | ||
3351 | if (tty->driver->flush_buffer) | 3346 | if (tty->driver->flush_buffer) |
3352 | tty->driver->flush_buffer(tty); | 3347 | tty->driver->flush_buffer(tty); |