summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugeniy Meshcheryakov <eugen@debian.org>2008-07-31 10:03:19 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2008-08-01 12:50:15 -0700
commit3ab36ab68531ad90648fdeedcaf437f121572ede (patch)
tree9a61fb71173caff9fdf29a9d3f3626d5c0fa26ef
parent84ff7a001270258f71d6ab0d164f351e32c9718a (diff)
downloadlinux-3.10-3ab36ab68531ad90648fdeedcaf437f121572ede.tar.gz
linux-3.10-3ab36ab68531ad90648fdeedcaf437f121572ede.tar.bz2
linux-3.10-3ab36ab68531ad90648fdeedcaf437f121572ede.zip
try harder to load tty ldisc driver
Currently function tty_ldisc_get() tries to load an ldisc driver module only when tty_ldisc_try_get() returns -EAGAIN. This happens only if module is being unloaded. If ldisc module is not loaded tty_ldisc_try_get() returns -EINVAL and this case is not handled in tty_ldisc_get(), so request_module() is not called. Attached patch fixes this by calling request_module() if tty_ldisc_try_get() returned any error code. I discovered this when my UMTS modem stopped working with 2.6.27-rc1 because module ppp_async was not loaded. Signed-off-by: Eugeniy Meshcheryakov <eugen@debian.org> Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/char/tty_ldisc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c
index 241cbdea65a..f307f135cbf 100644
--- a/drivers/char/tty_ldisc.c
+++ b/drivers/char/tty_ldisc.c
@@ -169,7 +169,7 @@ static int tty_ldisc_get(int disc, struct tty_ldisc *ld)
if (disc < N_TTY || disc >= NR_LDISCS)
return -EINVAL;
err = tty_ldisc_try_get(disc, ld);
- if (err == -EAGAIN) {
+ if (err < 0) {
request_module("tty-ldisc-%d", disc);
err = tty_ldisc_try_get(disc, ld);
}