2
* Target device null I/O.
3
* (C) 2005 MING Zhang <mingz@ele.uri.edu>
4
* This code is licenced under the GPL.
6
* The nullio mode will not return any meaningful or previous written
7
* data. It is only for performance measurement purpose.
10
#include <linux/types.h>
11
#include <linux/blkdev.h>
12
#include <linux/parser.h>
13
#include <linux/writeback.h>
16
#include "iscsi_dbg.h"
20
opt_blk_cnt, opt_ignore, opt_err,
23
static match_table_t tokens = {
24
/* alias for compatibility with existing setups and documentation */
25
{opt_blk_cnt, "sectors=%u"},
26
/* but actually it is the scsi block count, now that we can
27
* specify the block size. */
28
{opt_blk_cnt, "blocks=%u"},
29
{opt_ignore, "scsiid=%s"},
30
{opt_ignore, "scsisn=%s"},
31
{opt_ignore, "blocksize=%s"},
32
{opt_ignore, "type=%s"},
36
static int parse_nullio_params(struct iet_volume *volume, char *params)
41
while ((p = strsep(¶ms, ",")) != NULL) {
42
substring_t args[MAX_OPT_ARGS];
47
token = match_token(p, tokens, args);
50
q = match_strdup(&args[0]);
53
volume->blk_cnt = simple_strtoull(q, NULL, 10);
59
eprintk("Unknown %s\n", p);
67
static void nullio_detach(struct iet_volume *lu)
71
static int nullio_attach(struct iet_volume *lu, char *args)
75
if ((err = parse_nullio_params(lu, args)) < 0) {
81
lu->blk_shift = blksize_bits(IET_DEF_BLOCK_SIZE);
83
/* defaults to 64 GiB */
85
lu->blk_cnt = 1 << (36 - lu->blk_shift);
93
struct iotype nullio =
96
.attach = nullio_attach,
97
.detach = nullio_detach,