2 * Copyright (C) 2003 Christophe Saout <christophe@saout.de>
4 * This file is released under the GPL.
9 #include <linux/module.h>
10 #include <linux/init.h>
11 #include <linux/bio.h>
14 * Construct a dummy mapping that only returns zeros
16 static int zero_ctr(struct dm_target *ti, unsigned int argc, char **argv)
19 ti->error = "dm-zero: No arguments required";
27 * Fills the bio pages with zeros
29 static void zero_fill_bio(struct bio *bio)
35 bio_for_each_segment(bv, bio, i) {
36 char *data = bvec_kmap_irq(bv, &flags);
37 memset(data, 0, bv->bv_len);
38 flush_dcache_page(bv->bv_page);
39 bvec_kunmap_irq(data, &flags);
44 * Return zeros only on reads
46 static int zero_map(struct dm_target *ti, struct bio *bio,
47 union map_info *map_context)
54 /* readahead of null bytes only wastes buffer cache */
57 /* writes get silently dropped */
61 bio_endio(bio, bio->bi_size, 0);
63 /* accepted bio, don't make new request */
67 static struct target_type zero_target = {
70 .module = THIS_MODULE,
75 int __init dm_zero_init(void)
77 int r = dm_register_target(&zero_target);
80 DMERR("zero: register failed %d", r);
85 void __exit dm_zero_exit(void)
87 int r = dm_unregister_target(&zero_target);
90 DMERR("zero: unregister failed %d", r);
93 module_init(dm_zero_init)
94 module_exit(dm_zero_exit)
96 MODULE_AUTHOR("Christophe Saout <christophe@saout.de>");
97 MODULE_DESCRIPTION(DM_NAME " dummy target returning zeros");
98 MODULE_LICENSE("GPL");