[dm-devel] [PATCH 9/9] dm flakey: add debug feature to control debug output
Mike Snitzer
snitzer at redhat.com
Mon Jun 27 19:53:43 UTC 2011
Signed-off-by: Mike Snitzer <snitzer at redhat.com>
---
drivers/md/dm-flakey.c | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 58cebca..d0b5042 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -33,7 +33,8 @@ struct flakey_c {
};
enum feature_flag_bits {
- DROP_WRITES
+ DROP_WRITES,
+ FLAKEY_DEBUG
};
static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
@@ -44,7 +45,7 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
const char *arg_name;
static struct dm_arg _args[] = {
- {0, 5, "invalid number of feature args"},
+ {0, 6, "invalid number of feature args"},
{1, UINT_MAX, "invalid corrupt bio byte value"},
{0, UINT_MAX, "invalid corrupt bio flags mask"},
{0, 1, "invalid value to corrupt bio"},
@@ -88,6 +89,11 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
continue;
}
+ if (!strnicmp(arg_name, MESG_STR("debug"))) {
+ set_bit(FLAKEY_DEBUG, &fc->flags);
+ continue;
+ }
+
ti->error = "Unrecognised flakey feature request";
r = -EINVAL;
}
@@ -213,10 +219,12 @@ static void corrupt_bio_data(struct bio *bio, struct flakey_c *fc)
if (data && bio_bytes >= fc->corrupt_bio_byte) {
data[fc->corrupt_bio_byte-1] = fc->corrupt_bio_value;
- printk("corrupting data bio=%p by writing %u to byte %u "
- "(rw=%lu flags=%lu bi_sector=%lu cur_bytes=%u)\n",
- bio, fc->corrupt_bio_value, fc->corrupt_bio_byte,
- bio_data_dir(bio), bio->bi_rw, bio->bi_sector, bio_bytes);
+ if (test_bit(FLAKEY_DEBUG, &fc->flags))
+ printk("corrupting data bio=%p by writing %u to byte %u "
+ "(rw=%lu flags=%lu bi_sector=%lu cur_bytes=%u)\n",
+ bio, fc->corrupt_bio_value, fc->corrupt_bio_byte,
+ bio_data_dir(bio), bio->bi_rw, bio->bi_sector,
+ bio_bytes);
}
}
@@ -278,7 +286,7 @@ static int flakey_status(struct dm_target *ti, status_type_t type,
{
unsigned sz = 0;
struct flakey_c *fc = ti->private;
- unsigned drop_writes;
+ unsigned drop_writes, flakey_debug;
switch (type) {
case STATUSTYPE_INFO:
@@ -291,14 +299,18 @@ static int flakey_status(struct dm_target *ti, status_type_t type,
fc->down_interval);
drop_writes = test_bit(DROP_WRITES, &fc->flags);
+ flakey_debug = test_bit(FLAKEY_DEBUG, &fc->flags);
DMEMIT("%u ", drop_writes +
- (fc->corrupt_bio_byte > 0) * 4);
+ (fc->corrupt_bio_byte > 0) * 4 +
+ flakey_debug);
if (fc->corrupt_bio_byte)
DMEMIT("corrupt_bio_byte %u %u %u ", fc->corrupt_bio_byte,
fc->corrupt_bio_flags, fc->corrupt_bio_value);
if (drop_writes)
DMEMIT("drop_writes ");
+ if (flakey_debug)
+ DMEMIT("debug ");
break;
}
return 0;
--
1.7.1
More information about the dm-devel
mailing list