Commit b512353c authored by Martin Schwidefsky's avatar Martin Schwidefsky
Browse files

s390/3270: fix view reference counting



The tty3270_close function set tty->driver_data to NULL after the
open count dropped to zero but tty3270_cleanup still needs the
pointer to the tty3270 view to drop the reference count.

Move the clearing of tty->driver_data to tty3270_cleanup and
drop the unnecessary tty_port_tty_set calls in tty3270_install.

Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 5ff04fe5
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -924,10 +924,8 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)
		tty->winsize.ws_row = tp->view.rows - 2;
		tty->winsize.ws_col = tp->view.cols;
		tp->port.low_latency = 0;
		/* why to reassign? */
		tty_port_tty_set(&tp->port, tty);
		tp->inattr = TF_INPUT;
		return tty_port_install(&tp->port, driver, tty);
		goto port_install;
	}
	if (tty3270_max_index < tty->index + 1)
		tty3270_max_index = tty->index + 1;
@@ -953,7 +951,6 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)
		return rc;
	}

	tty_port_tty_set(&tp->port, tty);
	tp->port.low_latency = 0;
	tty->winsize.ws_row = tp->view.rows - 2;
	tty->winsize.ws_col = tp->view.cols;
@@ -975,6 +972,7 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)

	raw3270_activate_view(&tp->view);

port_install:
	rc = tty_port_install(&tp->port, driver, tty);
	if (rc) {
		raw3270_put_view(&tp->view);
@@ -1011,19 +1009,19 @@ tty3270_close(struct tty_struct *tty, struct file * filp)

	if (tty->count > 1)
		return;
	if (tp) {
		tty->driver_data = NULL;
	if (tp)
		tty_port_tty_set(&tp->port, NULL);
}
}

static void tty3270_cleanup(struct tty_struct *tty)
{
	struct tty3270 *tp = tty->driver_data;

	if (tp)
	if (tp) {
		tty->driver_data = NULL;
		raw3270_put_view(&tp->view);
	}
}

/*
 * We always have room.