From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 14:26:23 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 94BE1106566B; Wed, 16 Feb 2011 14:26:23 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 856058FC1F; Wed, 16 Feb 2011 14:26:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p1GEQNHv072615; Wed, 16 Feb 2011 14:26:23 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1GEQNrw072611; Wed, 16 Feb 2011 14:26:23 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102161426.p1GEQNrw072611@svn.freebsd.org> From: Alexander Motin Date: Wed, 16 Feb 2011 14:26:23 +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: r218732 - projects/graid/head/sys/geom/raid 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: Wed, 16 Feb 2011 14:26:23 -0000 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) {