summaryrefslogtreecommitdiff
path: root/sys/dev/raidframe
diff options
context:
space:
mode:
authoroster <oster@NetBSD.org>2006-06-12 22:49:35 +0000
committeroster <oster@NetBSD.org>2006-06-12 22:49:35 +0000
commit8c090abdfc90beeb72a6bb74553e103851d4af68 (patch)
tree826060e28e770f0e2c54b21d2353f747c67cf6dc /sys/dev/raidframe
parente487cf62f5958a4609ef5bb6e0a884efd29e77b3 (diff)
Do the "don't allocate > 1K on the stack" thing for raidioctl().
Diffstat (limited to 'sys/dev/raidframe')
-rw-r--r--sys/dev/raidframe/rf_netbsdkintf.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/sys/dev/raidframe/rf_netbsdkintf.c b/sys/dev/raidframe/rf_netbsdkintf.c
index 1d621440c5f..f3d6e15a889 100644
--- a/sys/dev/raidframe/rf_netbsdkintf.c
+++ b/sys/dev/raidframe/rf_netbsdkintf.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_netbsdkintf.c,v 1.208 2006/05/14 21:45:00 elad Exp $ */
+/* $NetBSD: rf_netbsdkintf.c,v 1.209 2006/06/12 22:49:35 oster Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -146,7 +146,7 @@
***********************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.208 2006/05/14 21:45:00 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.209 2006/06/12 22:49:35 oster Exp $");
#include <sys/param.h>
#include <sys/errno.h>
@@ -795,10 +795,9 @@ raidioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct lwp *l)
int raidid;
struct rf_recon_req *rrcopy, *rr;
RF_ComponentLabel_t *clabel;
- RF_ComponentLabel_t ci_label;
+ RF_ComponentLabel_t *ci_label;
RF_ComponentLabel_t **clabel_ptr;
RF_SingleComponent_t *sparePtr,*componentPtr;
- RF_SingleComponent_t hot_spare;
RF_SingleComponent_t component;
RF_ProgressInfo_t progressInfo, **progressInfoPtr;
int i, j, d;
@@ -1079,22 +1078,28 @@ raidioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct lwp *l)
raidPtr->serial_number = clabel->serial_number;
- raid_init_component_label(raidPtr, &ci_label);
- ci_label.serial_number = clabel->serial_number;
- ci_label.row = 0; /* we dont' pretend to support more */
+ RF_Malloc(ci_label, sizeof(RF_ComponentLabel_t),
+ (RF_ComponentLabel_t *));
+ if (ci_label == NULL)
+ return (ENOMEM);
+
+ raid_init_component_label(raidPtr, ci_label);
+ ci_label->serial_number = clabel->serial_number;
+ ci_label->row = 0; /* we dont' pretend to support more */
for(column=0;column<raidPtr->numCol;column++) {
diskPtr = &raidPtr->Disks[column];
if (!RF_DEAD_DISK(diskPtr->status)) {
- ci_label.partitionSize = diskPtr->partitionSize;
- ci_label.column = column;
+ ci_label->partitionSize = diskPtr->partitionSize;
+ ci_label->column = column;
raidwrite_component_label(
raidPtr->Disks[column].dev,
raidPtr->raid_cinfo[column].ci_vp,
- &ci_label );
+ ci_label );
}
}
-
+ RF_Free(ci_label, sizeof(RF_ComponentLabel_t));
+
return (retcode);
case RAIDFRAME_SET_AUTOCONFIG:
d = rf_set_autoconfig(raidPtr, *(int *) data);
@@ -1132,8 +1137,8 @@ raidioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct lwp *l)
case RAIDFRAME_ADD_HOT_SPARE:
sparePtr = (RF_SingleComponent_t *) data;
- memcpy( &hot_spare, sparePtr, sizeof(RF_SingleComponent_t));
- retcode = rf_add_hot_spare(raidPtr, &hot_spare);
+ memcpy( &component, sparePtr, sizeof(RF_SingleComponent_t));
+ retcode = rf_add_hot_spare(raidPtr, &component);
return(retcode);
case RAIDFRAME_REMOVE_HOT_SPARE: