Re: softraid raid1c keydisk cosmetic fix

2022-08-29 Thread Klemens Nanni
On Sat Aug 13, 2022 at 12:39 AM +04, Stefan Sperling wrote:
> Use raid1c-specific meta-data while looking for a key disk that
> belongs to a RAID 1C volume.
>
> By dumb luck this is only a cosmetic issue, because struct layout
> happens to put the field in the same place.

Good catch.  OK kn
One suggestion inline.

>  
> diff a87e94ce1617958c99b63ed0a056e46650a27375 
> ba39970f6365aeeb1b486101f6573c60b7f88573
> commit - a87e94ce1617958c99b63ed0a056e46650a27375
> commit + ba39970f6365aeeb1b486101f6573c60b7f88573
> blob - 762f6ee57d5e7902c097d71830fea6e63080e7b5
> blob + 737fafbaad517c55293c69f0a6ddcb8fbb720c83
> --- sys/dev/softraid.c
> +++ sys/dev/softraid.c
> @@ -2593,10 +2593,13 @@ sr_ioctl_vol(struct sr_softc *sc, struct bioc_vol *bv)
>   bv->bv_nodisk = sd->sd_meta->ssdi.ssd_chunk_no;
>  
>  #ifdef CRYPTO
> - if ((sd->sd_meta->ssdi.ssd_level == 'C' ||
> - sd->sd_meta->ssdi.ssd_level == 0x1C) &&
> + if (sd->sd_meta->ssdi.ssd_level == 'C' &&
>   sd->mds.mdd_crypto.key_disk != NULL)
>   bv->bv_nodisk++;
> +
> + if (sd->sd_meta->ssdi.ssd_level == 0x1C &&

I'd use either `else if' here or merge them into
if ((C && mdd_crypto.key_disk) ||
(1C && sr1c_crypto.key_disk))

> + sd->mds.mdd_raid1c.sr1c_crypto.key_disk != NULL)
> + bv->bv_nodisk++;
>  #endif
>   if (bv->bv_status == BIOC_SVREBUILD)
>   bv->bv_percent = sr_rebuild_percent(sd);
> @@ -2650,10 +2653,13 @@ sr_ioctl_disk(struct sr_softc *sc, struct bioc_disk *b
>   src = sd->sd_vol.sv_chunks[bd->bd_diskid];
>  #ifdef CRYPTO
>   else if (bd->bd_diskid == sd->sd_meta->ssdi.ssd_chunk_no &&
> - (sd->sd_meta->ssdi.ssd_level == 'C' ||
> - sd->sd_meta->ssdi.ssd_level == 0x1C) &&
> + sd->sd_meta->ssdi.ssd_level == 'C' &&
>   sd->mds.mdd_crypto.key_disk != NULL)
>   src = sd->mds.mdd_crypto.key_disk;
> + else if (bd->bd_diskid == sd->sd_meta->ssdi.ssd_chunk_no &&
> + sd->sd_meta->ssdi.ssd_level == 0x1C &&
> + sd->mds.mdd_raid1c.sr1c_crypto.key_disk != NULL)
> + src = sd->mds.mdd_crypto.key_disk;

Since this is the same plus a third condition, `else if' in both places
seems cleanest here.

>  #endif
>   else
>   break;



softraid raid1c keydisk cosmetic fix

2022-08-12 Thread Stefan Sperling
Use raid1c-specific meta-data while looking for a key disk that
belongs to a RAID 1C volume.

By dumb luck this is only a cosmetic issue, because struct layout
happens to put the field in the same place.

ok?
 
diff a87e94ce1617958c99b63ed0a056e46650a27375 
ba39970f6365aeeb1b486101f6573c60b7f88573
commit - a87e94ce1617958c99b63ed0a056e46650a27375
commit + ba39970f6365aeeb1b486101f6573c60b7f88573
blob - 762f6ee57d5e7902c097d71830fea6e63080e7b5
blob + 737fafbaad517c55293c69f0a6ddcb8fbb720c83
--- sys/dev/softraid.c
+++ sys/dev/softraid.c
@@ -2593,10 +2593,13 @@ sr_ioctl_vol(struct sr_softc *sc, struct bioc_vol *bv)
bv->bv_nodisk = sd->sd_meta->ssdi.ssd_chunk_no;
 
 #ifdef CRYPTO
-   if ((sd->sd_meta->ssdi.ssd_level == 'C' ||
-   sd->sd_meta->ssdi.ssd_level == 0x1C) &&
+   if (sd->sd_meta->ssdi.ssd_level == 'C' &&
sd->mds.mdd_crypto.key_disk != NULL)
bv->bv_nodisk++;
+
+   if (sd->sd_meta->ssdi.ssd_level == 0x1C &&
+   sd->mds.mdd_raid1c.sr1c_crypto.key_disk != NULL)
+   bv->bv_nodisk++;
 #endif
if (bv->bv_status == BIOC_SVREBUILD)
bv->bv_percent = sr_rebuild_percent(sd);
@@ -2650,10 +2653,13 @@ sr_ioctl_disk(struct sr_softc *sc, struct bioc_disk *b
src = sd->sd_vol.sv_chunks[bd->bd_diskid];
 #ifdef CRYPTO
else if (bd->bd_diskid == sd->sd_meta->ssdi.ssd_chunk_no &&
-   (sd->sd_meta->ssdi.ssd_level == 'C' ||
-   sd->sd_meta->ssdi.ssd_level == 0x1C) &&
+   sd->sd_meta->ssdi.ssd_level == 'C' &&
sd->mds.mdd_crypto.key_disk != NULL)
src = sd->mds.mdd_crypto.key_disk;
+   else if (bd->bd_diskid == sd->sd_meta->ssdi.ssd_chunk_no &&
+   sd->sd_meta->ssdi.ssd_level == 0x1C &&
+   sd->mds.mdd_raid1c.sr1c_crypto.key_disk != NULL)
+   src = sd->mds.mdd_crypto.key_disk;
 #endif
else
break;