summaryrefslogtreecommitdiffstats
path: root/drivers/block/loop/loop_file_fmt_qcow.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/loop/loop_file_fmt_qcow.c')
-rw-r--r--drivers/block/loop/loop_file_fmt_qcow.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/drivers/block/loop/loop_file_fmt_qcow.c b/drivers/block/loop/loop_file_fmt_qcow.c
new file mode 100644
index 000000000000..a122fd9c077e
--- /dev/null
+++ b/drivers/block/loop/loop_file_fmt_qcow.c
@@ -0,0 +1,106 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * loop_file_fmt_qcow.h
+ *
+ * QCOW file format driver for the loop device module.
+ *
+ * Copyright (C) 2019 Manuel Bentele
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include "loop_file_fmt.h"
+
+static int qcow_file_fmt_init(struct loop_file_fmt *lo_fmt)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: init QCOW file format");
+ return 0;
+}
+
+static void qcow_file_fmt_exit(struct loop_file_fmt *lo_fmt)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: exit QCOW file format");
+ return;
+}
+
+static int qcow_file_fmt_read(struct loop_file_fmt *lo_fmt,
+ struct request *rq)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: read QCOW file format");
+ return 0;
+}
+
+static int qcow_file_fmt_read_aio(struct loop_file_fmt *lo_fmt,
+ struct request *rq)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: read (aio) QCOW file format");
+ return 0;
+}
+
+static int qcow_file_fmt_write(struct loop_file_fmt *lo_fmt,
+ struct request *rq)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: write QCOW file format");
+ return 0;
+}
+
+static int qcow_file_fmt_write_aio(struct loop_file_fmt *lo_fmt,
+ struct request *rq)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: write (aio) QCOW file format");
+ return 0;
+}
+
+static int qcow_file_fmt_discard(struct loop_file_fmt *lo_fmt,
+ struct request *rq)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: discard QCOW file format");
+ return 0;
+}
+
+static int qcow_file_fmt_flush(struct loop_file_fmt *lo_fmt,
+ struct request *rq)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: flush QCOW file format");
+ return 0;
+}
+
+static struct loop_file_fmt_ops qcow_file_fmt_ops = {
+ .init = qcow_file_fmt_init,
+ .exit = qcow_file_fmt_exit,
+ .read = qcow_file_fmt_read,
+ .write = qcow_file_fmt_write,
+ .read_aio = qcow_file_fmt_read_aio,
+ .write_aio = qcow_file_fmt_write_aio,
+ .discard = qcow_file_fmt_discard,
+ .flush = qcow_file_fmt_flush
+};
+
+static struct loop_file_fmt_driver qcow_file_fmt_driver = {
+ .name = "QCOW",
+ .file_fmt_type = LO_FILE_FMT_QCOW,
+ .ops = &qcow_file_fmt_ops,
+ .owner = THIS_MODULE
+};
+
+static int __init loop_file_fmt_qcow_init(void)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: init loop device QCOW file format driver");
+ return loop_file_fmt_register_driver(&qcow_file_fmt_driver);
+}
+
+static void __exit loop_file_fmt_qcow_exit(void)
+{
+ printk(KERN_INFO "loop_file_fmt_qcow: exit loop device QCOW file format driver");
+ loop_file_fmt_unregister_driver(&qcow_file_fmt_driver);
+}
+
+module_init(loop_file_fmt_qcow_init);
+module_exit(loop_file_fmt_qcow_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Manuel Bentele <development@manuel-bentele.de>");
+MODULE_DESCRIPTION("Loop device QCOW file format driver");
+MODULE_SOFTDEP("pre: loop");