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