>>> "matthew green" <m...@netbsd.org> wrote > Module Name: src > Committed By: mrg > Date: Thu Jan 18 00:32:49 UTC 2018 > > Modified Files: > src/sbin/raidctl: raidctl.8 raidctl.c rf_configure.c > src/sys/conf: files > src/sys/dev/raidframe: files.raidframe raidframeio.h raidframevar.h > rf_compat50.c rf_decluster.c rf_decluster.h rf_kintf.h > rf_netbsdkintf.c rf_reconutil.c > src/sys/modules/raid: Makefile > src/sys/rump: Makefile.rump > src/sys/rump/dev/lib/libraidframe: Makefile > src/tests/dev/raidframe: t_raid.sh > Added Files: > src/sys/dev/raidframe: rf_compat32.c rf_compat32.h rf_compat80.c > rf_compat80.h > > Log Message: > implement 32-bit compat support for raidframe. > > convert several raidframe ioctls to be bitsize idempotent so that > they work the same in 32 and 64 bit worlds, allowing netbsd32 to > configure and query raid properly. remove useless 'row' in a few > places. add COMPAT_80 and put the old ioctls there. > > raidframeio.h: > RAIDFRAME_TEST_ACC > - remove, unused > RAIDFRAME_GET_COMPONENT_LABEL > - convert to label not pointer to label > RAIDFRAME_CHECK_RECON_STATUS_EXT > RAIDFRAME_CHECK_PARITYREWRITE_STATUS_EXT > RAIDFRAME_CHECK_COPYBACK_STATUS_EXT > - convert to progress info not pointer to info > RAIDFRAME_GET_INFO > - version entirely. > raidframevar.h: > - rf_recon_req{} has row, flags and raidPtr removed (they're > not a useful part of this interface.) > - RF_Config_s{} and RF_DeviceConfig_s{} have numRow/rows removed. > - RF_RaidDisk_s{} is re-ordered slightly to fix alignment > padding - the actual data was already OK. > - InstallSpareTable() loses row argument > > rf_compat32.c has code for RF_Config_s{} in 32 bit mode, used > by RAIDFRAME_CONFIGURE and RAIDFRAME_GET_INFO32. > > rf_compat80.c has code for rf_recon_req{}, RF_RaidDisk_s{} and > RF_DeviceConfig_s{} to handle RAIDFRAME_FAIL_DISK, > RAIDFRAME_GET_COMPONENT_LABEL, RAIDFRAME_CHECK_RECON_STATUS_EXT, > RAIDFRAME_CHECK_PARITYREWRITE_STATUS_EXT, > RAIDFRAME_CHECK_COPYBACK_STATUS_EXT, RAIDFRAME_GET_INFO. > > move several of the per-ioctl code blocks into separate functions. > > add rf_recon_req_internal{} to replace old usage of global > rf_recon_req{} that had unused void * in the structure, ruining > it's 32/64 bit ABI. > > add missing case for RAIDFRAME_GET_INFO50. > > adjust raid tests to use the new .conf format, and add a case to > test the old method as well. > > raidctl: > deal with lack of 'row' members in a couple of places. > fail request no longer takes row. > handle "START array" sections with just "numCol numSpare", ie > no "numRow" specified. for now, generate old-style configuration > but update raidctl.8 to specify the new style (keeping reference > to the old style.) > > note that: RF_ComponentLabel_s::{row,num_rows} and > RF_SingleComponent_s::row are obsolete but not removed yet. > > > To generate a diff of this commit: > cvs rdiff -u -r1.73 -r1.74 src/sbin/raidctl/raidctl.8 > cvs rdiff -u -r1.65 -r1.66 src/sbin/raidctl/raidctl.c > cvs rdiff -u -r1.32 -r1.33 src/sbin/raidctl/rf_configure.c > cvs rdiff -u -r1.1191 -r1.1192 src/sys/conf/files > cvs rdiff -u -r1.9 -r1.10 src/sys/dev/raidframe/files.raidframe > cvs rdiff -u -r1.7 -r1.8 src/sys/dev/raidframe/raidframeio.h \ > src/sys/dev/raidframe/rf_decluster.h > cvs rdiff -u -r1.17 -r1.18 src/sys/dev/raidframe/raidframevar.h > cvs rdiff -u -r0 -r1.1 src/sys/dev/raidframe/rf_compat32.c \ > src/sys/dev/raidframe/rf_compat32.h src/sys/dev/raidframe/rf_compat80.c \ > src/sys/dev/raidframe/rf_compat80.h > cvs rdiff -u -r1.2 -r1.3 src/sys/dev/raidframe/rf_compat50.c > cvs rdiff -u -r1.24 -r1.25 src/sys/dev/raidframe/rf_decluster.c \ > src/sys/dev/raidframe/rf_kintf.h > cvs rdiff -u -r1.352 -r1.353 src/sys/dev/raidframe/rf_netbsdkintf.c > cvs rdiff -u -r1.35 -r1.36 src/sys/dev/raidframe/rf_reconutil.c > cvs rdiff -u -r1.1 -r1.2 src/sys/modules/raid/Makefile > cvs rdiff -u -r1.122 -r1.123 src/sys/rump/Makefile.rump > cvs rdiff -u -r1.10 -r1.11 src/sys/rump/dev/lib/libraidframe/Makefile > cvs rdiff -u -r1.12 -r1.13 src/tests/dev/raidframe/t_raid.sh > > Please note that diffs are not public domain; they are subject to the > copyright notices on the relevant files.
The kernel with this changes cannot configure the RAIDframe device with old raidctl(8) as follows, since RF_Config_s has been changed (remove numRow) but no compat code. | dk_lookup on device: failed! | RAIDFRAME: failed rf_ConfigureDisks with 2 | raidctl: ioctl (RAIDFRAME_CONFIGURE) failed: No such file or directory -- Takeshi Nakayama