diff options
author | 2013-03-31 10:41:16 +0000 | |
---|---|---|
committer | 2013-03-31 10:41:16 +0000 | |
commit | 2cb1dc0a8a76a545bb5b8105cb4484c766960f72 (patch) | |
tree | 9e7a7099046b0d5c13dad67aab3c72360c03bf1f | |
parent | typo fix from rodent@netbsd; (diff) | |
download | wireguard-openbsd-2cb1dc0a8a76a545bb5b8105cb4484c766960f72.tar.xz wireguard-openbsd-2cb1dc0a8a76a545bb5b8105cb4484c766960f72.zip |
Pull the initialisation of runtime values out into a separate init
function, rather than having it spread across create/assemble/alloc.
Also handle strip size errors appropriately, rather than failing silently.
ok krw@
-rw-r--r-- | sys/dev/softraid_raid0.c | 27 | ||||
-rw-r--r-- | sys/dev/softraid_raid6.c | 35 | ||||
-rw-r--r-- | sys/dev/softraid_raidp.c | 24 |
3 files changed, 51 insertions, 35 deletions
diff --git a/sys/dev/softraid_raid0.c b/sys/dev/softraid_raid0.c index 4e87e3cfa00..700e401b08c 100644 --- a/sys/dev/softraid_raid0.c +++ b/sys/dev/softraid_raid0.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid_raid0.c,v 1.36 2013/03/30 02:02:14 jsing Exp $ */ +/* $OpenBSD: softraid_raid0.c,v 1.37 2013/03/31 10:41:16 jsing Exp $ */ /* * Copyright (c) 2008 Marco Peereboom <marco@peereboom.us> * @@ -48,6 +48,7 @@ int sr_raid0_create(struct sr_discipline *, struct bioc_createraid *, int, int64_t); int sr_raid0_assemble(struct sr_discipline *, struct bioc_createraid *, int, void *); +int sr_raid0_init(struct sr_discipline *); int sr_raid0_alloc_resources(struct sr_discipline *); int sr_raid0_free_resources(struct sr_discipline *); int sr_raid0_rw(struct sr_workunit *); @@ -88,18 +89,26 @@ sr_raid0_create(struct sr_discipline *sd, struct bioc_createraid *bc, sd->sd_meta->ssdi.ssd_size = (coerced_size & ~((sd->sd_meta->ssdi.ssd_strip_size >> DEV_BSHIFT) - 1)) * no_chunk; - sd->sd_max_ccb_per_wu = - (MAXPHYS / sd->sd_meta->ssdi.ssd_strip_size + 1) * - SR_RAID0_NOWU * no_chunk; - - return 0; + return sr_raid0_init(sd); } int sr_raid0_assemble(struct sr_discipline *sd, struct bioc_createraid *bc, int no_chunks, void *data) { + return sr_raid0_init(sd); +} +int +sr_raid0_init(struct sr_discipline *sd) +{ + /* Initialise runtime values. */ + sd->mds.mdd_raid0.sr0_strip_bits = + sr_validate_stripsize(sd->sd_meta->ssdi.ssd_strip_size); + if (sd->mds.mdd_raid0.sr0_strip_bits == -1) { + sr_error(sd->sd_sc, "invalid strip size", sd->sd_name); + return EINVAL; + } sd->sd_max_ccb_per_wu = (MAXPHYS / sd->sd_meta->ssdi.ssd_strip_size + 1) * SR_RAID0_NOWU * sd->sd_meta->ssdi.ssd_chunk_no; @@ -120,12 +129,6 @@ sr_raid0_alloc_resources(struct sr_discipline *sd) if (sr_ccb_alloc(sd)) goto bad; - /* setup runtime values */ - sd->mds.mdd_raid0.sr0_strip_bits = - sr_validate_stripsize(sd->sd_meta->ssdi.ssd_strip_size); - if (sd->mds.mdd_raid0.sr0_strip_bits == -1) - goto bad; - rv = 0; bad: return (rv); diff --git a/sys/dev/softraid_raid6.c b/sys/dev/softraid_raid6.c index a94ceab5df9..d2b052f10f4 100644 --- a/sys/dev/softraid_raid6.c +++ b/sys/dev/softraid_raid6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid_raid6.c,v 1.41 2013/03/30 14:41:37 jsing Exp $ */ +/* $OpenBSD: softraid_raid6.c,v 1.42 2013/03/31 10:41:16 jsing Exp $ */ /* * Copyright (c) 2009 Marco Peereboom <marco@peereboom.us> * Copyright (c) 2009 Jordan Hargrave <jordan@openbsd.org> @@ -53,6 +53,7 @@ int sr_raid6_create(struct sr_discipline *, struct bioc_createraid *, int, int64_t); int sr_raid6_assemble(struct sr_discipline *, struct bioc_createraid *, int, void *); +int sr_raid6_init(struct sr_discipline *); int sr_raid6_alloc_resources(struct sr_discipline *); int sr_raid6_free_resources(struct sr_discipline *); int sr_raid6_rw(struct sr_workunit *); @@ -127,21 +128,31 @@ sr_raid6_create(struct sr_discipline *sd, struct bioc_createraid *bc, * XXX add variable strip size later even though MAXPHYS is really * the clever value, users like * to tinker with that type of stuff. */ - sd->sd_meta->ssdi.ssd_strip_size = MAXPHYS; - sd->sd_meta->ssdi.ssd_size = (coerced_size & + sd->sd_meta->ssdi.ssd_strip_size = MAXPHYS; + sd->sd_meta->ssdi.ssd_size = (coerced_size & ~((sd->sd_meta->ssdi.ssd_strip_size >> DEV_BSHIFT) - 1)) * (no_chunk - 2); - /* only if stripsize <= MAXPHYS */ - sd->sd_max_ccb_per_wu = max(6, 2 * no_chunk); - - return 0; + return sr_raid6_init(sd); } int sr_raid6_assemble(struct sr_discipline *sd, struct bioc_createraid *bc, int no_chunk, void *data) { + return sr_raid6_init(sd); +} + +int +sr_raid6_init(struct sr_discipline *sd) +{ + /* Initialise runtime values. */ + sd->mds.mdd_raid6.sr6_strip_bits = + sr_validate_stripsize(sd->sd_meta->ssdi.ssd_strip_size); + if (sd->mds.mdd_raid6.sr6_strip_bits == -1) { + sr_error(sd->sd_sc, "invalid strip size"); + return EINVAL; + } /* only if stripsize <= MAXPHYS */ sd->sd_max_ccb_per_wu = max(6, 2 * sd->sd_meta->ssdi.ssd_chunk_no); @@ -168,12 +179,6 @@ sr_raid6_alloc_resources(struct sr_discipline *sd) if (sr_ccb_alloc(sd)) goto bad; - /* setup runtime values */ - sd->mds.mdd_raid6.sr6_strip_bits = - sr_validate_stripsize(sd->sd_meta->ssdi.ssd_strip_size); - if (sd->mds.mdd_raid6.sr6_strip_bits == -1) - goto bad; - rv = 0; bad: return (rv); @@ -395,7 +400,7 @@ die: /* modes: * readq: sr_raid6_addio(i, lba, length, NULL, SCSI_DATA_IN, - * SR_CCBF_FREEBUF, qbuf, NULL, 0); + * SR_CCBF_FREEBUF, qbuf, NULL, 0); * readp: sr_raid6_addio(i, lba, length, NULL, SCSI_DATA_IN, * SR_CCBF_FREEBUF, pbuf, NULL, 0); * readx: sr_raid6_addio(i, lba, length, NULL, SCSI_DATA_IN, @@ -413,7 +418,7 @@ sr_raid6_rw(struct sr_workunit *wu) daddr64_t blk, lbaoffs, strip_no, chunk, qchunk, pchunk, fchunk; daddr64_t strip_size, no_chunk, lba, chunk_offs, phys_offs; daddr64_t strip_bits, length, strip_offs, datalen, row_size; - void *pbuf, *data, *qbuf; + void *pbuf, *data, *qbuf; /* blk and scsi error will be handled by sr_validate_io */ if (sr_validate_io(wu, &blk, "sr_raid6_rw")) diff --git a/sys/dev/softraid_raidp.c b/sys/dev/softraid_raidp.c index 28e9a10e6ea..86179ec02b0 100644 --- a/sys/dev/softraid_raidp.c +++ b/sys/dev/softraid_raidp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid_raidp.c,v 1.38 2013/03/30 14:41:37 jsing Exp $ */ +/* $OpenBSD: softraid_raidp.c,v 1.39 2013/03/31 10:41:16 jsing Exp $ */ /* * Copyright (c) 2009 Marco Peereboom <marco@peereboom.us> * Copyright (c) 2009 Jordan Hargrave <jordan@openbsd.org> @@ -49,6 +49,7 @@ int sr_raidp_create(struct sr_discipline *, struct bioc_createraid *, int, int64_t); int sr_raidp_assemble(struct sr_discipline *, struct bioc_createraid *, int, void *); +int sr_raidp_init(struct sr_discipline *); int sr_raidp_alloc_resources(struct sr_discipline *); int sr_raidp_free_resources(struct sr_discipline *); int sr_raidp_rw(struct sr_workunit *); @@ -110,13 +111,26 @@ sr_raidp_create(struct sr_discipline *sd, struct bioc_createraid *bc, ~((sd->sd_meta->ssdi.ssd_strip_size >> DEV_BSHIFT) - 1)) * (no_chunk - 1); - return 0; + return sr_raidp_init(sd); } int sr_raidp_assemble(struct sr_discipline *sd, struct bioc_createraid *bc, int no_chunk, void *data) { + return sr_raidp_init(sd); +} + +int +sr_raidp_init(struct sr_discipline *sd) +{ + /* Initialise runtime values. */ + sd->mds.mdd_raidp.srp_strip_bits = + sr_validate_stripsize(sd->sd_meta->ssdi.ssd_strip_size); + if (sd->mds.mdd_raidp.srp_strip_bits == -1) { + sr_error(sd->sd_sc, "invalid strip size"); + return EINVAL; + } return 0; } @@ -140,12 +154,6 @@ sr_raidp_alloc_resources(struct sr_discipline *sd) if (sr_ccb_alloc(sd)) goto bad; - /* setup runtime values */ - sd->mds.mdd_raidp.srp_strip_bits = - sr_validate_stripsize(sd->sd_meta->ssdi.ssd_strip_size); - if (sd->mds.mdd_raidp.srp_strip_bits == -1) - goto bad; - rv = 0; bad: return (rv); |