svn commit: r226010 - projects/geom-events/sys/geom/raid3
Lev A. Serebryakov
lev at FreeBSD.org
Tue Oct 4 17:07:57 UTC 2011
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;
More information about the svn-src-projects
mailing list