|
@@ -711,6 +711,7 @@ static int port_fops_open(struct inode *inode, struct file *filp)
|
|
|
{
|
|
|
struct cdev *cdev = inode->i_cdev;
|
|
|
struct port *port;
|
|
|
+ int ret;
|
|
|
|
|
|
port = container_of(cdev, struct port, cdev);
|
|
|
filp->private_data = port;
|
|
@@ -719,14 +720,17 @@ static int port_fops_open(struct inode *inode, struct file *filp)
|
|
|
* Don't allow opening of console port devices -- that's done
|
|
|
* via /dev/hvc
|
|
|
*/
|
|
|
- if (is_console_port(port))
|
|
|
- return -ENXIO;
|
|
|
+ if (is_console_port(port)) {
|
|
|
+ ret = -ENXIO;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
|
|
|
/* Allow only one process to open a particular port at a time */
|
|
|
spin_lock_irq(&port->inbuf_lock);
|
|
|
if (port->guest_connected) {
|
|
|
spin_unlock_irq(&port->inbuf_lock);
|
|
|
- return -EMFILE;
|
|
|
+ ret = -EMFILE;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
port->guest_connected = true;
|
|
@@ -745,6 +749,8 @@ static int port_fops_open(struct inode *inode, struct file *filp)
|
|
|
send_control_msg(filp->private_data, VIRTIO_CONSOLE_PORT_OPEN, 1);
|
|
|
|
|
|
return 0;
|
|
|
+out:
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
/*
|