Date: Tue, 4 Oct 2011 17:07:57 +0000 (UTC) From: "Lev A. Serebryakov" <lev@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r226010 - projects/geom-events/sys/geom/raid3 Message-ID: <201110041707.p94H7vqp069856@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201110041707.p94H7vqp069856>