Date: Wed, 16 Feb 2011 14:26:23 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r218732 - projects/graid/head/sys/geom/raid Message-ID: <201102161426.p1GEQNrw072611@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102161426.p1GEQNrw072611>