for extern function uart_remove_one_port:
    need check pointer whether be NULL, before the main work.
    just like what the other extern function uart_add_one_port has done.
    uart_add_one_port and uart_remove_one_port are pair

  information:
    for the callers (such as drivers/tty/serial/jsm: jsm_tty.c, jsm_driver.c)
    they realy assume that:
      they still can call uart_remove_one_port, after uart_add_one_port failed
    we (as an extern function), have to understand it (just like kfree).
 

Signed-off-by: Chen Gang <gang.c...@asianux.com>
---
 drivers/tty/serial/serial_core.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 2c7230a..bd65549 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2642,6 +2642,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct 
uart_port *uport)
 {
        struct uart_state *state = drv->state + uport->line;
        struct tty_port *port = &state->port;
+       int ret = 0;
 
        BUG_ON(in_interrupt());
 
@@ -2656,6 +2657,11 @@ int uart_remove_one_port(struct uart_driver *drv, struct 
uart_port *uport)
         * succeeding while we shut down the port.
         */
        mutex_lock(&port->mutex);
+       if (!state->uart_port) {
+               mutex_unlock(&port->mutex);
+               ret = -EINVAL;
+               goto out;
+       }
        uport->flags |= UPF_DEAD;
        mutex_unlock(&port->mutex);
 
@@ -2679,9 +2685,10 @@ int uart_remove_one_port(struct uart_driver *drv, struct 
uart_port *uport)
        uport->type = PORT_UNKNOWN;
 
        state->uart_port = NULL;
+out:
        mutex_unlock(&port_mutex);
 
-       return 0;
+       return ret;
 }
 
 /*
-- 
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to