]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Copyright (C) 2003 Christophe Saout <[email protected]> | |
3 | * | |
4 | * This file is released under the GPL. | |
5 | */ | |
6 | ||
7 | #include "dm.h" | |
8 | ||
9 | #include <linux/module.h> | |
10 | #include <linux/init.h> | |
11 | #include <linux/bio.h> | |
12 | ||
13 | /* | |
14 | * Construct a dummy mapping that only returns zeros | |
15 | */ | |
16 | static int zero_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |
17 | { | |
18 | if (argc != 0) { | |
19 | ti->error = "dm-zero: No arguments required"; | |
20 | return -EINVAL; | |
21 | } | |
22 | ||
23 | return 0; | |
24 | } | |
25 | ||
26 | /* | |
27 | * Return zeros only on reads | |
28 | */ | |
29 | static int zero_map(struct dm_target *ti, struct bio *bio, | |
30 | union map_info *map_context) | |
31 | { | |
32 | switch(bio_rw(bio)) { | |
33 | case READ: | |
34 | zero_fill_bio(bio); | |
35 | break; | |
36 | case READA: | |
37 | /* readahead of null bytes only wastes buffer cache */ | |
38 | return -EIO; | |
39 | case WRITE: | |
40 | /* writes get silently dropped */ | |
41 | break; | |
42 | } | |
43 | ||
44 | bio_endio(bio, bio->bi_size, 0); | |
45 | ||
46 | /* accepted bio, don't make new request */ | |
47 | return 0; | |
48 | } | |
49 | ||
50 | static struct target_type zero_target = { | |
51 | .name = "zero", | |
52 | .version = {1, 0, 0}, | |
53 | .module = THIS_MODULE, | |
54 | .ctr = zero_ctr, | |
55 | .map = zero_map, | |
56 | }; | |
57 | ||
58 | int __init dm_zero_init(void) | |
59 | { | |
60 | int r = dm_register_target(&zero_target); | |
61 | ||
62 | if (r < 0) | |
63 | DMERR("zero: register failed %d", r); | |
64 | ||
65 | return r; | |
66 | } | |
67 | ||
68 | void __exit dm_zero_exit(void) | |
69 | { | |
70 | int r = dm_unregister_target(&zero_target); | |
71 | ||
72 | if (r < 0) | |
73 | DMERR("zero: unregister failed %d", r); | |
74 | } | |
75 | ||
76 | module_init(dm_zero_init) | |
77 | module_exit(dm_zero_exit) | |
78 | ||
79 | MODULE_AUTHOR("Christophe Saout <[email protected]>"); | |
80 | MODULE_DESCRIPTION(DM_NAME " dummy target returning zeros"); | |
81 | MODULE_LICENSE("GPL"); |