PERFORCE change 118254 for review

Ulf Lilleengen lulf at FreeBSD.org
Mon Apr 16 18:30:57 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=118254

Change 118254 by lulf at lulf_carrot on 2007/04/16 18:30:04

	- Silly C. We can't just dereference local variables, so we have to hack
	  it up.

Affected files ...

.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#3 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#3 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_drive.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_init.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_list.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_move.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_plex.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_raid5.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_raid5.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_rename.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_rm.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_share.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_share.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_state.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_subr.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_var.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_kernel/geom_vinum_volume.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/Makefile#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_drive.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_init.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_list.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_move.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_plex.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_raid5.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_raid5.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_rename.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_rm.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_share.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_share.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_state.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_subr.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_var.h#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/geom_vinum_volume.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/gvinum.8#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/gvinum.c#2 delete
.. //depot/projects/soc2007/lulf/gvinum_fixup/vinum_user/gvinum.h#2 delete

Differences ...

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#3 (text+ko) ====

@@ -507,27 +507,31 @@
 			case GV_EVENT_SET_SD_STATE:
 				printf("VINUM: event 'setstate sd'\n");
 				s = ev->arg1;
-				newstate = *(int *)ev->arg2;
-				flags = *(int *)ev->arg3;
+				newstate = *ev->arg2;
+				flags = *ev->arg3;
 				err = gv_set_sd_state(s, newstate, flags);
+				/* XXX: Handle these errors better, provide
+				 * ERROR CODES.*/
 				if (err)
 					printf("VINUM: error setting subdisk "
 					    "state\n");
-				/* XXX: Handle these errors better, provide
-				 * ERROR CODES.*/
+				free(ev->arg2);
+				free(ev->arg3);
 				break;
 
 			case GV_EVENT_SET_DRIVE_STATE:
 				printf("VINUM: event 'setstate drive'\n");
 				d = ev->arg1;
-				newstate = *(int *)ev->arg2;
-				flags = *(int *)ev->arg3;
+				newstate = *ev->arg2;
+				flags = *ev->arg3;
 				err = gv_set_drive_state(d, newstate, flags);
+				/* XXX: Handle these errors better, provide
+				 * ERROR CODES.*/
 				if (err)
 					printf("VINUM: error setting drive "
 					    "state");
-				/* XXX: Handle these errors better, provide
-				 * ERROR CODES.*/
+				free(ev->arg2);
+				free(ev->arg3);
 				break;
 
 			case GV_EVENT_THREAD_EXIT:

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#3 (text+ko) ====

@@ -44,7 +44,7 @@
 	struct gv_sd *s;
 	struct gv_drive *d;
 	char *obj, *state;
-	int f, *flags, newstate, type;
+	int *f, *flags, *newstate, type;
 
 	f = 0;
 	obj = gctl_get_param(req, "object", NULL);
@@ -77,25 +77,30 @@
 		break;
 
 	case GV_TYPE_SD:
-		newstate = gv_sdstatei(state);
-		if (newstate < 0) {
+		if (gv_sdstatei(state) < 0) {
 			gctl_error(req, "invalid subdisk state '%s'", state);
 			break;
 		}
 		s = gv_find_sd(sc, obj);
-
-		gv_post_event(sc, GV_EVENT_SET_SD_STATE, s, &newstate, &f);
+		newstatep = malloc(sizeof(int), M_WAITOK | M_ZERO));
+		*newstatep = gv_sdstatei(state);
+		flagp = malloc(sizeof(int), M_WAITOK | M_ZERO));
+		*flagp = f;
+		gv_post_event(sc, GV_EVENT_SET_SD_STATE, s, newstatep, flagp);
 		break;
 
 	case GV_TYPE_DRIVE:
-		newstate = gv_drivestatei(state);
-		if (newstate < 0) {
+		if (gv_drivestatei(state) < 0) {
 			gctl_error(req, "invalid drive state '%s'", state);
 			break;
 		}
 		d = gv_find_drive(sc, obj);
 
-		gv_post_event(sc, GV_EVENT_SET_DRIVE_STATE, d, &newstate, &f);
+		newstatep = malloc(sizeof(int), M_WAITOK | M_ZERO));
+		*newstatep = gv_sdstatei(state);
+		flagp = malloc(sizeof(int), M_WAITOK | M_ZERO));
+		*flagp = f;
+		gv_post_event(sc, GV_EVENT_SET_DRIVE_STATE, d, newstatep, flagp);
 		break;
 
 	default:


More information about the p4-projects mailing list