diff options
Diffstat (limited to 'drivers/block/loop/loop_file_fmt_qcow.c')
-rw-r--r-- | drivers/block/loop/loop_file_fmt_qcow.c | 106 |
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"); |