From: Cedric Le Goater Replaces the pid_t value with a struct pid to avoid pid wrap around problems. Signed-off-by: Cedric Le Goater Cc: Martin Schwidefsky Acked-by: Eric W. Biederman Signed-off-by: Andrew Morton --- drivers/s390/char/fs3270.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) diff -puN drivers/s390/char/fs3270.c~s390-update-fs3270-to-use-a-struct-pid drivers/s390/char/fs3270.c --- a/drivers/s390/char/fs3270.c~s390-update-fs3270-to-use-a-struct-pid +++ a/drivers/s390/char/fs3270.c @@ -28,7 +28,7 @@ struct raw3270_fn fs3270_fn; struct fs3270 { struct raw3270_view view; - pid_t fs_pid; /* Pid of controlling program. */ + struct pid *fs_pid; /* Pid of controlling program. */ int read_command; /* ccw command to use for reads. */ int write_command; /* ccw command to use for writes. */ int attention; /* Got attention. */ @@ -103,7 +103,7 @@ fs3270_restore_callback(struct raw3270_r fp = (struct fs3270 *) rq->view; if (rq->rc != 0 || rq->rescnt != 0) { if (fp->fs_pid) - kill_proc(fp->fs_pid, SIGHUP, 1); + kill_pid(fp->fs_pid, SIGHUP, 1); } fp->rdbuf_size = 0; raw3270_request_reset(rq); @@ -174,7 +174,7 @@ fs3270_save_callback(struct raw3270_requ */ if (rq->rc != 0 || rq->rescnt == 0) { if (fp->fs_pid) - kill_proc(fp->fs_pid, SIGHUP, 1); + kill_pid(fp->fs_pid, SIGHUP, 1); fp->rdbuf_size = 0; } else fp->rdbuf_size = fp->rdbuf->size - rq->rescnt; @@ -443,7 +443,7 @@ fs3270_open(struct inode *inode, struct return PTR_ERR(fp); init_waitqueue_head(&fp->wait); - fp->fs_pid = current->pid; + fp->fs_pid = get_pid(task_pid(current)); rc = raw3270_add_view(&fp->view, &fs3270_fn, minor); if (rc) { fs3270_free_view(&fp->view); @@ -481,7 +481,8 @@ fs3270_close(struct inode *inode, struct fp = filp->private_data; filp->private_data = NULL; if (fp) { - fp->fs_pid = 0; + put_pid(fp->fs_pid); + fp->fs_pid = NULL; raw3270_reset(&fp->view); raw3270_put_view(&fp->view); raw3270_del_view(&fp->view); _