cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dm-zero.c (1634B)


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