diff mbox

[v5] dm: add unstriped target

Message ID 20171219201647.vqmsmj2l26o7sldj@sbauer-Z170X-UD5 (mailing list archive)
State Superseded, archived
Delegated to: Mike Snitzer
Headers show

Commit Message

Scott Bauer Dec. 19, 2017, 8:16 p.m. UTC
On Tue, Dec 19, 2017 at 03:03:53PM -0500, Mike Snitzer wrote:
> On Tue, Dec 19 2017 at  1:35P -0500,
> Scott Bauer <scott.bauer@intel.com> wrote:
> 
> > 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.
> 
> See below for incremental patch that should fix the NULL pointer, please
> test and I'll fold it in, along with your incremental.
> 
> Thanks!
> 
> > 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.
> 
> I'll take it, no worries on sending out v6.

Functionally the code is good now -- Thank you very much for the help.
The last thing is I need to fix up the bash script in documentation.
I *really* have to work on this other project for the rest of the day.
Do you care if we land this now, and I will just submit a small fixup
of the Documentation tomorrow?


--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
diff mbox

Patch

diff --git a/drivers/md/dm-unstripe.c b/drivers/md/dm-unstripe.c
index b6f641dcbdee..7a8fd1bfbdad 100644
--- a/drivers/md/dm-unstripe.c
+++ b/drivers/md/dm-unstripe.c
@@ -47,7 +47,6 @@  static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	sector_t width, tmp_len;
 	unsigned long long start;
 	char dummy;
-	int r = -EINVAL;
 
 	if (argc != 5) {
 		ti->error = "Invalid number of arguments";
@@ -86,13 +85,12 @@  static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		goto err;
 	}
 
-	r = dm_get_device(ti, argv[3], dm_table_get_mode(ti->table), &uc->dev);
-	if (r) {
+	if (dm_get_device(ti, argv[3], dm_table_get_mode(ti->table), &uc->dev)) {
 		ti->error = "Couldn't get striped device";
 		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;
 	}
@@ -114,8 +112,7 @@  static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 		goto err;
 	}
 
-	r = dm_set_target_max_io_len(ti, uc->chunk_size);
-	if (r) {
+	if (dm_set_target_max_io_len(ti, uc->chunk_size)) {
 		ti->error = "Failed to set max io len";
 		goto err;
 	}
@@ -124,7 +121,7 @@  static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
 	return 0;
 err:
 	cleanup_unstripe(uc, ti);
-	return r;
+	return -EINVAL;
 }
 
 static void unstripe_dtr(struct dm_target *ti)
@@ -139,11 +136,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;
 }