From 795d7dc093eaa88fc1768fa1970ff0fefcde2e80 Mon Sep 17 00:00:00 2001 From: Scott Long Date: Tue, 3 Jun 2003 02:10:55 +0000 Subject: When scanning for changed containers, don't assume that the controller will respond in a sane manner. Thanks to Petri Helenius for spotting this and pestering me to fix it. --- sys/dev/aac/aac.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'sys/dev/aac') diff --git a/sys/dev/aac/aac.c b/sys/dev/aac/aac.c index 69ad8bcb18bdd..21935a82523c6 100644 --- a/sys/dev/aac/aac.c +++ b/sys/dev/aac/aac.c @@ -306,7 +306,7 @@ aac_startup(void *arg) struct aac_fib *fib; struct aac_mntinfo *mi; struct aac_mntinforesp *mir = NULL; - int i = 0; + int count = 0, i = 0; debug_called(1); @@ -327,14 +327,16 @@ aac_startup(void *arg) mi->MntCount = i; if (aac_sync_fib(sc, ContainerCommand, 0, fib, sizeof(struct aac_mntinfo))) { - debug(2, "error probing container %d", i); + printf("error probing container %d", i); continue; } mir = (struct aac_mntinforesp *)&fib->data[0]; + /* XXX Need to check if count changed */ + count = mir->MntRespCount; aac_add_container(sc, mir, 0); i++; - } while ((i < mir->MntRespCount) && (i < AAC_MAX_CONTAINERS)); + } while ((i < count) && (i < AAC_MAX_CONTAINERS)); aac_release_sync_fib(sc); @@ -2565,7 +2567,7 @@ aac_handle_aif(struct aac_softc *sc, struct aac_fib *fib) struct aac_mntinforesp *mir = NULL; u_int16_t rsize; int next, found; - int added = 0, i = 0; + int count = 0, added = 0, i = 0; debug_called(2); @@ -2600,11 +2602,13 @@ aac_handle_aif(struct aac_softc *sc, struct aac_fib *fib) rsize = sizeof(mir); if (aac_sync_fib(sc, ContainerCommand, 0, fib, sizeof(struct aac_mntinfo))) { - debug(2, "Error probing container %d\n", + printf("Error probing container %d\n", i); continue; } mir = (struct aac_mntinforesp *)&fib->data[0]; + /* XXX Need to check if count changed */ + count = mir->MntRespCount; /* * Check the container against our list. * co->co_found was already set to 0 in a @@ -2640,8 +2644,7 @@ aac_handle_aif(struct aac_softc *sc, struct aac_fib *fib) added = 1; } i++; - } while ((i < mir->MntRespCount) && - (i < AAC_MAX_CONTAINERS)); + } while ((i < count) && (i < AAC_MAX_CONTAINERS)); aac_release_sync_fib(sc); /* -- cgit v1.3