[dm-devel] dm-flakey NOT to return -EIO on READ?
Akira Hayakawa
ruby.wktk at gmail.com
Wed Jul 6 06:33:25 UTC 2016
Hi,
I am using dm-flakey to emulate a broken device that should return -EIO on both read and write.
I use the parameter up_interval=0 and down_interval=1.
But when I am dd-ing the flakey device, while write fails, read succeeds.
This isn't the behavior I expect.
Then I looked into the code.
326 static int flakey_end_io(struct dm_target *ti, struct bio *bio, int error)
327 {
328 struct flakey_c *fc = ti->private;
329 struct per_bio_data *pb = dm_per_bio_data(bio, sizeof(struct per_bio_data));
330
331 /*
332 * Corrupt successful READs while in down state.
333 * If flags were specified, only corrupt those that match.
334 */
335 if (fc->corrupt_bio_byte && !error && pb->bio_submitted &&
336 (bio_data_dir(bio) == READ) && (fc->corrupt_bio_rw == READ) &&
337 all_corrupt_bio_flags_match(bio, fc))
338 corrupt_bio_data(bio, fc);
339
340 return error;
341 }
When the bio direction is READ and currupt_bio_bytes isn't specified
the READ bio is handled normally right?
I think READ requests should return -EIO if
1. corrupt_bio_bytes isn't specified
2. but the requested is handled during down interval.
as well as WRITE requests:
305 /*
306 * Corrupt matching writes.
307 */
308 if (fc->corrupt_bio_byte && (fc->corrupt_bio_rw == WRITE)) {
309 if (all_corrupt_bio_flags_match(bio, fc))
310 corrupt_bio_data(bio, fc);
311 goto map_bio;
312 }
313
314 /*
315 * By default, error all I/O.
316 */
317 return -EIO;
318 }
This code is similar to what we see in the end_io.
If my understanding is correct, I would like to modify dm-flakey to return -EIO in the end_io.
I would like to request for comments.
Thanks,
- Akira
More information about the dm-devel
mailing list