Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/raidframe Components which match on everything but t...



details:   https://anonhg.NetBSD.org/src/rev/a7a5981556b7
branches:  trunk
changeset: 486716:a7a5981556b7
user:      oster <oster%NetBSD.org@localhost>
date:      Sat May 27 20:29:14 2000 +0000

description:
Components which match on everything but the mod_counter are
renegades, and must be handled correctly.  In particular, they should
be added to their old auto-config set, but then immediately released.
Failing to do otherwise means that they potentialy end up in a
different (and competing!) RAID set which may auto-configure in place
of the correct one, and cause all sorts of chaos at auto-configure
time.

diffstat:

 sys/dev/raidframe/rf_netbsdkintf.c |  27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)

diffs (41 lines):

diff -r 109309c87958 -r a7a5981556b7 sys/dev/raidframe/rf_netbsdkintf.c
--- a/sys/dev/raidframe/rf_netbsdkintf.c        Sat May 27 20:02:58 2000 +0000
+++ b/sys/dev/raidframe/rf_netbsdkintf.c        Sat May 27 20:29:14 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: rf_netbsdkintf.c,v 1.81 2000/05/27 19:12:03 oster Exp $        */
+/*     $NetBSD: rf_netbsdkintf.c,v 1.82 2000/05/27 20:29:14 oster Exp $        */
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -2842,9 +2842,28 @@
                        cset = config_sets;
                        while(cset!=NULL) {
                                if (rf_does_it_fit(cset, ac)) {
-                                       /* looks like it matches */
-                                       ac->next = cset->ac;
-                                       cset->ac = ac;
+                                       /* looks like it matches... how about
+                                          the mod_counter? */
+
+                                       if (cset->ac->clabel->mod_counter ==
+                                           ac->clabel->mod_counter) {
+                                               ac->next = cset->ac;
+                                               cset->ac = ac;
+                                       } else {
+                                               /* else we ignore this, as
+                                                  it used to belong to a
+                                                  valid set, but is no
+                                                  longer in sync.  It's
+                                                  effectively a renegade,
+                                                  and we don't want to add
+                                                  it *anywhere*.  Close it,
+                                                  and carry on.
+                                               */
+                                               VOP_CLOSE(ac->vp, FREAD, 
+                                                          NOCRED, 0);
+                                               vput(ac->vp);
+                                               
+                                       }
                                        break;
                                }
                                cset = cset->next;



Home | Main Index | Thread Index | Old Index