svn commit: r218732 - projects/graid/head/sys/geom/raid
Alexander Motin
mav at FreeBSD.org
Wed Feb 16 14:26:23 UTC 2011
Author: mav
Date: Wed Feb 16 14:26:23 2011
New Revision: 218732
URL: http://svn.freebsd.org/changeset/base/218732
Log:
Move topology lock/unlock inside g_raid_kill_consumer().
Modified:
projects/graid/head/sys/geom/raid/g_raid.c
projects/graid/head/sys/geom/raid/md_intel.c
projects/graid/head/sys/geom/raid/md_jmicron.c
Modified: projects/graid/head/sys/geom/raid/g_raid.c
==============================================================================
--- projects/graid/head/sys/geom/raid/g_raid.c Wed Feb 16 14:25:26 2011 (r218731)
+++ projects/graid/head/sys/geom/raid/g_raid.c Wed Feb 16 14:26:23 2011 (r218732)
@@ -652,11 +652,12 @@ g_raid_kill_consumer(struct g_raid_softc
struct g_provider *pp;
int retaste_wait;
- g_topology_assert();
+ g_topology_assert_not();
+ g_topology_lock();
cp->private = NULL;
if (g_raid_consumer_is_busy(sc, cp))
- return;
+ goto out;
pp = cp->provider;
retaste_wait = 0;
if (cp->acw == 1) {
@@ -676,11 +677,13 @@ g_raid_kill_consumer(struct g_raid_softc
* after retaste event is sent.
*/
g_post_event(g_raid_destroy_consumer, cp, M_WAITOK, NULL);
- return;
+ goto out;
}
G_RAID_DEBUG(1, "Consumer %s destroyed.", pp->name);
g_detach(cp);
g_destroy_consumer(cp);
+out:
+ g_topology_unlock();
}
static void
@@ -1228,11 +1231,8 @@ g_raid_disk_done_request(struct bio *bp)
if (bp->bio_from != NULL) {
bp->bio_from->index--;
disk = bp->bio_from->private;
- if (disk == NULL) {
- g_topology_lock();
+ if (disk == NULL)
g_raid_kill_consumer(sc, bp->bio_from);
- g_topology_unlock();
- }
}
bp->bio_offset -= sd->sd_offset;
@@ -1869,9 +1869,7 @@ g_raid_destroy_disk(struct g_raid_disk *
sc = disk->d_softc;
G_RAID_DEBUG1(2, sc, "Destroying disk.");
if (disk->d_consumer) {
- g_topology_lock();
g_raid_kill_consumer(sc, disk->d_consumer);
- g_topology_unlock();
disk->d_consumer = NULL;
}
TAILQ_FOREACH_SAFE(sd, &disk->d_subdisks, sd_next, tmp) {
Modified: projects/graid/head/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 14:25:26 2011 (r218731)
+++ projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 14:26:23 2011 (r218732)
@@ -1327,9 +1327,7 @@ g_raid_md_event_intel(struct g_raid_md_o
if (pd->pd_disk_pos >= 0) {
g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE);
if (disk->d_consumer) {
- g_topology_lock();
g_raid_kill_consumer(sc, disk->d_consumer);
- g_topology_unlock();
disk->d_consumer = NULL;
}
TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) {
@@ -1908,9 +1906,7 @@ makedisk:
if (pd->pd_disk_pos >= 0) {
g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE);
if (disk->d_consumer) {
- g_topology_lock();
g_raid_kill_consumer(sc, disk->d_consumer);
- g_topology_unlock();
disk->d_consumer = NULL;
}
TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) {
@@ -1992,9 +1988,7 @@ makedisk:
gctl_error(req,
"Can't get serial for provider '%s'.",
diskname);
- g_topology_lock();
g_raid_kill_consumer(sc, cp);
- g_topology_unlock();
error = -7;
break;
}
Modified: projects/graid/head/sys/geom/raid/md_jmicron.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 14:25:26 2011 (r218731)
+++ projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 14:26:23 2011 (r218732)
@@ -987,9 +987,7 @@ g_raid_md_event_jmicron(struct g_raid_md
if (pd->pd_disk_pos >= 0) {
g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE);
if (disk->d_consumer) {
- g_topology_lock();
g_raid_kill_consumer(sc, disk->d_consumer);
- g_topology_unlock();
disk->d_consumer = NULL;
}
TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) {
@@ -1319,9 +1317,7 @@ makedisk:
if (pd->pd_disk_pos >= 0) {
g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE);
if (disk->d_consumer) {
- g_topology_lock();
g_raid_kill_consumer(sc, disk->d_consumer);
- g_topology_unlock();
disk->d_consumer = NULL;
}
TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) {
More information about the svn-src-projects
mailing list