~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux-2.6.17/drivers/md/dm-zero.c

Version: ~ [ 2.6.16 ] ~ [ 2.6.17 ] ~
Architecture: ~ [ ia64 ] ~ [ i386 ] ~ [ arm ] ~ [ ppc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (C) 2003 Christophe Saout <christophe@saout.de>
  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 static 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 static 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 <christophe@saout.de>");
 80 MODULE_DESCRIPTION(DM_NAME " dummy target returning zeros");
 81 MODULE_LICENSE("GPL");
 82 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.