virtio: virtconsole: Use seq_file for debugfs operations
authorTuomas Tynkkynen <tuomas@tuxera.com>
Thu, 12 Jul 2018 21:39:56 +0000 (00:39 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 16 Jul 2018 10:03:53 +0000 (12:03 +0200)
Simplifies the code and is more conventional to what's used in the rest
of the kernel for debugfs ops.

Signed-off-by: Tuomas Tynkkynen <tuomas@tuxera.com>
Reviewed-by: Amit Shah <amit@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/char/virtio_console.c

index 17084cf..5b5b5d7 100644 (file)
@@ -1309,51 +1309,35 @@ static const struct attribute_group port_attribute_group = {
        .attrs = port_sysfs_entries,
 };
 
-static ssize_t debugfs_read(struct file *filp, char __user *ubuf,
-                           size_t count, loff_t *offp)
+static int debugfs_show(struct seq_file *s, void *data)
 {
-       struct port *port;
-       char *buf;
-       ssize_t ret, out_offset, out_count;
+       struct port *port = s->private;
+
+       seq_printf(s, "name: %s\n", port->name ? port->name : "");
+       seq_printf(s, "guest_connected: %d\n", port->guest_connected);
+       seq_printf(s, "host_connected: %d\n", port->host_connected);
+       seq_printf(s, "outvq_full: %d\n", port->outvq_full);
+       seq_printf(s, "bytes_sent: %lu\n", port->stats.bytes_sent);
+       seq_printf(s, "bytes_received: %lu\n", port->stats.bytes_received);
+       seq_printf(s, "bytes_discarded: %lu\n", port->stats.bytes_discarded);
+       seq_printf(s, "is_console: %s\n",
+                  is_console_port(port) ? "yes" : "no");
+       seq_printf(s, "console_vtermno: %u\n", port->cons.vtermno);
 
-       out_count = 1024;
-       buf = kmalloc(out_count, GFP_KERNEL);
-       if (!buf)
-               return -ENOMEM;
+       return 0;
+}
 
-       port = filp->private_data;
-       out_offset = 0;
-       out_offset += snprintf(buf + out_offset, out_count,
-                              "name: %s\n", port->name ? port->name : "");
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "guest_connected: %d\n", port->guest_connected);
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "host_connected: %d\n", port->host_connected);
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "outvq_full: %d\n", port->outvq_full);
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "bytes_sent: %lu\n", port->stats.bytes_sent);
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "bytes_received: %lu\n",
-                              port->stats.bytes_received);
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "bytes_discarded: %lu\n",
-                              port->stats.bytes_discarded);
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "is_console: %s\n",
-                              is_console_port(port) ? "yes" : "no");
-       out_offset += snprintf(buf + out_offset, out_count - out_offset,
-                              "console_vtermno: %u\n", port->cons.vtermno);
-
-       ret = simple_read_from_buffer(ubuf, count, offp, buf, out_offset);
-       kfree(buf);
-       return ret;
+static int debugfs_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, debugfs_show, inode->i_private);
 }
 
 static const struct file_operations port_debugfs_ops = {
        .owner = THIS_MODULE,
-       .open  = simple_open,
-       .read  = debugfs_read,
+       .open = debugfs_open,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static void set_console_size(struct port *port, u16 rows, u16 cols)