[dm-devel] [PATCH v5] dm: add unstriped target

Scott Bauer scott.bauer at intel.com
Tue Dec 19 18:35:11 UTC 2017


On Mon, Dec 18, 2017 at 06:22:33PM -0500, Mike Snitzer wrote:

> +	if (sscanf(argv[1], "%llu%c", &start, &dummy) != 1) {
                        ^ should be argv[4]
> +		ti->error = "Invalid striped device offset";
> +		goto err;
> +	}
> +	uc->physical_start = start;

Hi Mike,
Sorry for the bombardment of emails. I think I've fixed the last
problem. Above is the last issue.

Below is a patch you can apply that will fix up the sector switch, I
had mentioned in the previous mail, as well as the wrong argv usage
from above.

I still have not solved the NULL pointer issue, i'll continue to
investigate that. Unless you have an idea of why that is occuring.

You can trigger it without having to create/remove/create. Just a
creation with a bad (odd length) target length will do it.

If you don't want this patch but want me to do a v6 I can do that as
well.

Thank you

diff --git a/drivers/md/dm-unstripe.c b/drivers/md/dm-unstripe.c
index b6f641dcbdee..df62b8a51299 100644
--- a/drivers/md/dm-unstripe.c
+++ b/drivers/md/dm-unstripe.c
@@ -92,7 +92,7 @@ static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		goto err;
 	}
 
-	if (sscanf(argv[1], "%llu%c", &start, &dummy) != 1) {
+	if (sscanf(argv[4], "%llu%c", &start, &dummy) != 1) {
 		ti->error = "Invalid striped device offset";
 		goto err;
 	}
@@ -139,11 +139,12 @@ static sector_t map_to_core(struct dm_target *ti, struct bio *bio)
 	struct unstripe_c *uc = ti->private;
 	sector_t sector = bio->bi_iter.bi_sector;
 
+	/* Shift us up to the right "row" on the stripe */
+	sector += uc->unstripe_width * (sector >> uc->chunk_shift);
+
 	/* Account for what stripe we're operating on */
 	sector += uc->unstripe_offset;
 
-	/* Shift us up to the right "row" on the stripe */
-	sector += uc->unstripe_width * (sector >> uc->chunk_shift);
 	return sector;
 }
 




More information about the dm-devel mailing list