diff options
author | Cedric Le Goater <clg@fr.ibm.com> | 2006-10-02 05:17:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 10:57:15 -0400 |
commit | 782237a2418e2561a87c86a4832726931adce737 (patch) | |
tree | 2d647654b23bb2867e3c785d22090c7f12298f78 | |
parent | 2425c08b37244005ff221efe4957d8aaff18609c (diff) |
[PATCH] s390: update fs3270 to use a struct pid
Replaces the pid_t value with a struct pid to avoid pid wrap around
problems.
Signed-off-by: Cedric Le Goater <clg@fr.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Acked-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/s390/char/fs3270.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/s390/char/fs3270.c b/drivers/s390/char/fs3270.c index b4557fa30858..78f8bda81dae 100644 --- a/drivers/s390/char/fs3270.c +++ b/drivers/s390/char/fs3270.c | |||
@@ -27,7 +27,7 @@ struct raw3270_fn fs3270_fn; | |||
27 | 27 | ||
28 | struct fs3270 { | 28 | struct fs3270 { |
29 | struct raw3270_view view; | 29 | struct raw3270_view view; |
30 | pid_t fs_pid; /* Pid of controlling program. */ | 30 | struct pid *fs_pid; /* Pid of controlling program. */ |
31 | int read_command; /* ccw command to use for reads. */ | 31 | int read_command; /* ccw command to use for reads. */ |
32 | int write_command; /* ccw command to use for writes. */ | 32 | int write_command; /* ccw command to use for writes. */ |
33 | int attention; /* Got attention. */ | 33 | int attention; /* Got attention. */ |
@@ -102,7 +102,7 @@ fs3270_restore_callback(struct raw3270_request *rq, void *data) | |||
102 | fp = (struct fs3270 *) rq->view; | 102 | fp = (struct fs3270 *) rq->view; |
103 | if (rq->rc != 0 || rq->rescnt != 0) { | 103 | if (rq->rc != 0 || rq->rescnt != 0) { |
104 | if (fp->fs_pid) | 104 | if (fp->fs_pid) |
105 | kill_proc(fp->fs_pid, SIGHUP, 1); | 105 | kill_pid(fp->fs_pid, SIGHUP, 1); |
106 | } | 106 | } |
107 | fp->rdbuf_size = 0; | 107 | fp->rdbuf_size = 0; |
108 | raw3270_request_reset(rq); | 108 | raw3270_request_reset(rq); |
@@ -173,7 +173,7 @@ fs3270_save_callback(struct raw3270_request *rq, void *data) | |||
173 | */ | 173 | */ |
174 | if (rq->rc != 0 || rq->rescnt == 0) { | 174 | if (rq->rc != 0 || rq->rescnt == 0) { |
175 | if (fp->fs_pid) | 175 | if (fp->fs_pid) |
176 | kill_proc(fp->fs_pid, SIGHUP, 1); | 176 | kill_pid(fp->fs_pid, SIGHUP, 1); |
177 | fp->rdbuf_size = 0; | 177 | fp->rdbuf_size = 0; |
178 | } else | 178 | } else |
179 | fp->rdbuf_size = fp->rdbuf->size - rq->rescnt; | 179 | fp->rdbuf_size = fp->rdbuf->size - rq->rescnt; |
@@ -442,7 +442,7 @@ fs3270_open(struct inode *inode, struct file *filp) | |||
442 | return PTR_ERR(fp); | 442 | return PTR_ERR(fp); |
443 | 443 | ||
444 | init_waitqueue_head(&fp->wait); | 444 | init_waitqueue_head(&fp->wait); |
445 | fp->fs_pid = current->pid; | 445 | fp->fs_pid = get_pid(task_pid(current)); |
446 | rc = raw3270_add_view(&fp->view, &fs3270_fn, minor); | 446 | rc = raw3270_add_view(&fp->view, &fs3270_fn, minor); |
447 | if (rc) { | 447 | if (rc) { |
448 | fs3270_free_view(&fp->view); | 448 | fs3270_free_view(&fp->view); |
@@ -480,7 +480,8 @@ fs3270_close(struct inode *inode, struct file *filp) | |||
480 | fp = filp->private_data; | 480 | fp = filp->private_data; |
481 | filp->private_data = NULL; | 481 | filp->private_data = NULL; |
482 | if (fp) { | 482 | if (fp) { |
483 | fp->fs_pid = 0; | 483 | put_pid(fp->fs_pid); |
484 | fp->fs_pid = NULL; | ||
484 | raw3270_reset(&fp->view); | 485 | raw3270_reset(&fp->view); |
485 | raw3270_put_view(&fp->view); | 486 | raw3270_put_view(&fp->view); |
486 | raw3270_del_view(&fp->view); | 487 | raw3270_del_view(&fp->view); |