diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2008-04-30 03:54:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-30 11:29:47 -0400 |
commit | f34d7a5b7010b82fe97da95496b9971435530062 (patch) | |
tree | 87e2abec1e33ed4fe5e63ee2fd000bc2ad745e57 /fs | |
parent | 251b8dd7eee30fda089a1dc088abf4fc9a0dee9c (diff) |
tty: The big operations rework
- Operations are now a shared const function block as with most other Linux
objects
- Introduce wrappers for some optional functions to get consistent behaviour
- Wrap put_char which used to be patched by the tty layer
- Document which functions are needed/optional
- Make put_char report success/fail
- Cache the driver->ops pointer in the tty as tty->ops
- Remove various surplus lock calls we no longer need
- Remove proc_write method as noted by Alexey Dobriyan
- Introduce some missing sanity checks where certain driver/ldisc
combinations would oops as they didn't check needed methods were present
[akpm@linux-foundation.org: fix fs/compat_ioctl.c build]
[akpm@linux-foundation.org: fix isicom]
[akpm@linux-foundation.org: fix arch/ia64/hp/sim/simserial.c build]
[akpm@linux-foundation.org: fix kgdb]
Signed-off-by: Alan Cox <alan@redhat.com>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/compat_ioctl.c | 2 | ||||
-rw-r--r-- | fs/proc/proc_tty.c | 6 |
2 files changed, 3 insertions, 5 deletions
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index 9663e8776724..97dba0d92348 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c | |||
@@ -1053,7 +1053,7 @@ static int vt_check(struct file *file) | |||
1053 | if (tty_paranoia_check(tty, inode, "tty_ioctl")) | 1053 | if (tty_paranoia_check(tty, inode, "tty_ioctl")) |
1054 | return -EINVAL; | 1054 | return -EINVAL; |
1055 | 1055 | ||
1056 | if (tty->driver->ioctl != vt_ioctl) | 1056 | if (tty->ops->ioctl != vt_ioctl) |
1057 | return -EINVAL; | 1057 | return -EINVAL; |
1058 | 1058 | ||
1059 | vc = (struct vc_data *)tty->driver_data; | 1059 | vc = (struct vc_data *)tty->driver_data; |
diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c index ac26ccc25f42..21f490f5d65c 100644 --- a/fs/proc/proc_tty.c +++ b/fs/proc/proc_tty.c | |||
@@ -192,16 +192,14 @@ void proc_tty_register_driver(struct tty_driver *driver) | |||
192 | { | 192 | { |
193 | struct proc_dir_entry *ent; | 193 | struct proc_dir_entry *ent; |
194 | 194 | ||
195 | if ((!driver->read_proc && !driver->write_proc) || | 195 | if (!driver->ops->read_proc || !driver->driver_name || |
196 | !driver->driver_name || | ||
197 | driver->proc_entry) | 196 | driver->proc_entry) |
198 | return; | 197 | return; |
199 | 198 | ||
200 | ent = create_proc_entry(driver->driver_name, 0, proc_tty_driver); | 199 | ent = create_proc_entry(driver->driver_name, 0, proc_tty_driver); |
201 | if (!ent) | 200 | if (!ent) |
202 | return; | 201 | return; |
203 | ent->read_proc = driver->read_proc; | 202 | ent->read_proc = driver->ops->read_proc; |
204 | ent->write_proc = driver->write_proc; | ||
205 | ent->owner = driver->owner; | 203 | ent->owner = driver->owner; |
206 | ent->data = driver; | 204 | ent->data = driver; |
207 | 205 | ||