Skip to content

Commit

Permalink
virtio/console: Wait until the port is ready on splice
Browse files Browse the repository at this point in the history
Wait if the port is not connected or full on splice
like as write is doing.

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Acked-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
  • Loading branch information
Masami Hiramatsu authored and Rusty Russell committed Sep 28, 2012
1 parent ec8fc87 commit efe75d2
Showing 1 changed file with 27 additions and 12 deletions.
39 changes: 27 additions & 12 deletions drivers/char/virtio_console.c
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,26 @@ static ssize_t port_fops_read(struct file *filp, char __user *ubuf,
return fill_readbuf(port, ubuf, count, true);
}

static int wait_port_writable(struct port *port, bool nonblock)
{
int ret;

if (will_write_block(port)) {
if (nonblock)
return -EAGAIN;

ret = wait_event_freezable(port->waitqueue,
!will_write_block(port));
if (ret < 0)
return ret;
}
/* Port got hot-unplugged. */
if (!port->guest_connected)
return -ENODEV;

return 0;
}

static ssize_t port_fops_write(struct file *filp, const char __user *ubuf,
size_t count, loff_t *offp)
{
Expand All @@ -740,18 +760,9 @@ static ssize_t port_fops_write(struct file *filp, const char __user *ubuf,

nonblock = filp->f_flags & O_NONBLOCK;

if (will_write_block(port)) {
if (nonblock)
return -EAGAIN;

ret = wait_event_freezable(port->waitqueue,
!will_write_block(port));
if (ret < 0)
return ret;
}
/* Port got hot-unplugged. */
if (!port->guest_connected)
return -ENODEV;
ret = wait_port_writable(port, nonblock);
if (ret < 0)
return ret;

count = min((size_t)(32 * 1024), count);

Expand Down Expand Up @@ -851,6 +862,10 @@ static ssize_t port_fops_splice_write(struct pipe_inode_info *pipe,
.u.data = &sgl,
};

ret = wait_port_writable(port, filp->f_flags & O_NONBLOCK);
if (ret < 0)
return ret;

sgl.n = 0;
sgl.len = 0;
sgl.sg = kmalloc(sizeof(struct scatterlist) * MAX_SPLICE_PAGES,
Expand Down

0 comments on commit efe75d2

Please sign in to comment.