From owner-svn-src-projects@FreeBSD.ORG Tue Oct 4 17:07:57 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 56396106564A; Tue, 4 Oct 2011 17:07:57 +0000 (UTC) (envelope-from lev@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3BCAA8FC08; Tue, 4 Oct 2011 17:07:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p94H7vV7069860; Tue, 4 Oct 2011 17:07:57 GMT (envelope-from lev@svn.freebsd.org) Received: (from lev@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p94H7vqp069856; Tue, 4 Oct 2011 17:07:57 GMT (envelope-from lev@svn.freebsd.org) Message-Id: <201110041707.p94H7vqp069856@svn.freebsd.org> From: "Lev A. Serebryakov" Date: Tue, 4 Oct 2011 17:07:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r226010 - projects/geom-events/sys/geom/raid3 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Oct 2011 17:07:57 -0000 Author: lev (ports committer) Date: Tue Oct 4 17:07:56 2011 New Revision: 226010 URL: http://svn.freebsd.org/changeset/base/226010 Log: Add geom_notify_*() calls to geom_raid3. This is more than a trivial change. Replace calls with DISCONNECTED disk state with calls REMOVED disk state to all manual operations. Modified: projects/geom-events/sys/geom/raid3/g_raid3.c projects/geom-events/sys/geom/raid3/g_raid3.h projects/geom-events/sys/geom/raid3/g_raid3_ctl.c Modified: projects/geom-events/sys/geom/raid3/g_raid3.c ============================================================================== --- projects/geom-events/sys/geom/raid3/g_raid3.c Tue Oct 4 17:03:39 2011 (r226009) +++ projects/geom-events/sys/geom/raid3/g_raid3.c Tue Oct 4 17:07:56 2011 (r226010) @@ -151,6 +151,8 @@ g_raid3_disk_state2str(int state) return ("SYNCHRONIZING"); case G_RAID3_DISK_STATE_DISCONNECTED: return ("DISCONNECTED"); + case G_RAID3_DISK_STATE_REMOVE: + return ("REMOVE"); default: return ("INVALID"); } @@ -2275,6 +2277,8 @@ g_raid3_sync_start(struct g_raid3_softc else g_io_request(bp, disk->d_sync.ds_consumer); } + + g_notify_sync_start(sc->sc_provider); } /* @@ -2310,6 +2314,8 @@ g_raid3_sync_stop(struct g_raid3_softc * G_RAID3_DEBUG(0, "Device %s: rebuilding provider %s stopped.", sc->sc_name, g_raid3_get_diskname(disk)); } + g_notify_sync_stop(sc->sc_provider, !type); + free(disk->d_sync.ds_bios, M_RAID3); disk->d_sync.ds_bios = NULL; cp = disk->d_sync.ds_consumer; @@ -2621,8 +2627,10 @@ g_raid3_update_device(struct g_raid3_sof return; if (g_raid3_ndisks(sc, G_RAID3_DISK_STATE_ACTIVE) < sc->sc_ndisks - 1) { - if (sc->sc_provider != NULL) + if (sc->sc_provider != NULL) { + g_notify_destroyed(sc->sc_provider); g_raid3_destroy_provider(sc); + } sc->sc_flags |= G_RAID3_DEVICE_FLAG_DESTROY; return; } @@ -2821,6 +2829,7 @@ again: } break; case G_RAID3_DISK_STATE_DISCONNECTED: + case G_RAID3_DISK_STATE_REMOVE: /* * Possible scenarios: * 1. Device wasn't running yet, but disk disappear. @@ -2864,6 +2873,13 @@ again: G_RAID3_DEBUG(0, "Device %s: provider %s disconnected.", sc->sc_name, g_raid3_get_diskname(disk)); + /* Don't notify about manual destroy */ + if (state == G_RAID3_DISK_STATE_DISCONNECTED) + g_notify_disconnect(sc->sc_provider, disk->d_consumer, + ((g_raid3_ndisks(sc, -1) < sc->sc_ndisks)? + G_NOTIFY_DISCONNECT_DEAD: + G_NOTIFY_DISCONNECT_FIXABLE)); + g_raid3_destroy_disk(disk); break; default: Modified: projects/geom-events/sys/geom/raid3/g_raid3.h ============================================================================== --- projects/geom-events/sys/geom/raid3/g_raid3.h Tue Oct 4 17:03:39 2011 (r226009) +++ projects/geom-events/sys/geom/raid3/g_raid3.h Tue Oct 4 17:07:56 2011 (r226010) @@ -136,7 +136,7 @@ struct g_raid3_device_sync { #define G_RAID3_DISK_STATE_STALE 4 #define G_RAID3_DISK_STATE_SYNCHRONIZING 5 #define G_RAID3_DISK_STATE_DISCONNECTED 6 -#define G_RAID3_DISK_STATE_DESTROY 7 +#define G_RAID3_DISK_STATE_REMOVE 7 struct g_raid3_disk { u_int d_no; /* Disk number. */ struct g_consumer *d_consumer; /* Consumer. */ Modified: projects/geom-events/sys/geom/raid3/g_raid3_ctl.c ============================================================================== --- projects/geom-events/sys/geom/raid3/g_raid3_ctl.c Tue Oct 4 17:03:39 2011 (r226009) +++ projects/geom-events/sys/geom/raid3/g_raid3_ctl.c Tue Oct 4 17:07:56 2011 (r226010) @@ -250,7 +250,7 @@ g_raid3_ctl_configure(struct gctl_req *r * component will not be retasted. */ g_raid3_event_send(disk, - G_RAID3_DISK_STATE_DISCONNECTED, + G_RAID3_DISK_STATE_REMOVE, G_RAID3_EVENT_DONTWAIT); } } @@ -317,7 +317,7 @@ g_raid3_ctl_rebuild(struct gctl_req *req g_topology_lock(); error = g_raid3_read_metadata(disk->d_consumer, &md); g_topology_unlock(); - g_raid3_event_send(disk, G_RAID3_DISK_STATE_DISCONNECTED, + g_raid3_event_send(disk, G_RAID3_DISK_STATE_REMOVE, G_RAID3_EVENT_WAIT); if (error != 0) { gctl_error(req, "Cannot read metadata from %s.", pp->name); @@ -592,7 +592,7 @@ g_raid3_ctl_remove(struct gctl_req *req, g_raid3_get_diskname(disk)); } else { g_raid3_event_send(disk, - G_RAID3_DISK_STATE_DISCONNECTED, + G_RAID3_DISK_STATE_REMOVE, G_RAID3_EVENT_DONTWAIT); } break;