From owner-svn-src-projects@FreeBSD.ORG Sat Mar 19 19:58:09 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 9B2E4106564A; Sat, 19 Mar 2011 19:58:09 +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 91AC68FC13; Sat, 19 Mar 2011 19:58:09 +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 p2JJw9dI033417; Sat, 19 Mar 2011 19:58:09 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2JJw9JS033416; Sat, 19 Mar 2011 19:58:09 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103191958.p2JJw9JS033416@svn.freebsd.org> From: Alexander Motin Date: Sat, 19 Mar 2011 19:58:09 +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: r219784 - 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: Sat, 19 Mar 2011 19:58:09 -0000 Author: mav Date: Sat Mar 19 19:58:09 2011 New Revision: 219784 URL: http://svn.freebsd.org/changeset/base/219784 Log: Do not use disks in G_RAID_DISK_S_OFFLINE state for keeping places. It works fine for other formats, but for Promise in most it is impossible to say how many disks are missing, so the whole idea of placeholders is not applicable. Modified: projects/graid/head/sys/geom/raid/md_promise.c Modified: projects/graid/head/sys/geom/raid/md_promise.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_promise.c Sat Mar 19 19:50:36 2011 (r219783) +++ projects/graid/head/sys/geom/raid/md_promise.c Sat Mar 19 19:58:09 2011 (r219784) @@ -1117,9 +1117,8 @@ g_raid_md_event_promise(struct g_raid_md /* Write updated metadata to all disks. */ g_raid_md_write_promise(md, NULL, NULL, NULL); - /* Check if anything left except placeholders. */ - if (g_raid_ndisks(sc, -1) == - g_raid_ndisks(sc, G_RAID_DISK_S_OFFLINE)) + /* Check if anything left. */ + if (g_raid_ndisks(sc, -1) == 0) g_raid_destroy_node(sc, 0); else g_raid_md_promise_refill(sc); @@ -1340,16 +1339,12 @@ g_raid_md_ctl_promise(struct g_raid_md_o sd->sd_offset = 0; sd->sd_size = size; TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); - if (sd->sd_disk->d_consumer != NULL) { - g_raid_change_disk_state(disk, - G_RAID_DISK_S_ACTIVE); - g_raid_change_subdisk_state(sd, - G_RAID_SUBDISK_S_ACTIVE); - g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, - G_RAID_EVENT_SUBDISK); - } else { - g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); - } + g_raid_change_disk_state(disk, + G_RAID_DISK_S_ACTIVE); + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_ACTIVE); + g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, + G_RAID_EVENT_SUBDISK); } /* Write metadata based on created entities. */ @@ -1651,35 +1646,16 @@ g_raid_md_ctl_promise(struct g_raid_md_o pd = (struct g_raid_md_promise_perdisk *)disk->d_md_data; - /* Erase metadata on deleting disk. */ + /* Erase metadata on deleting disk and destroy it. */ promise_meta_erase(disk->d_consumer); - - /* If disk was assigned, just update statuses. */ - if (pd->pd_subdisks >= 0) { - g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); - if (disk->d_consumer) { - g_raid_kill_consumer(sc, disk->d_consumer); - disk->d_consumer = NULL; - } - TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { - g_raid_change_subdisk_state(sd, - G_RAID_SUBDISK_S_NONE); - g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, - G_RAID_EVENT_SUBDISK); - } - } else { - /* Otherwise -- delete. */ - g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); - g_raid_destroy_disk(disk); - } + g_raid_destroy_disk(disk); } /* Write updated metadata to remaining disks. */ g_raid_md_write_promise(md, NULL, NULL, NULL); - /* Check if anything left except placeholders. */ - if (g_raid_ndisks(sc, -1) == - g_raid_ndisks(sc, G_RAID_DISK_S_OFFLINE)) + /* Check if anything left. */ + if (g_raid_ndisks(sc, -1) == 0) g_raid_destroy_node(sc, 0); else g_raid_md_promise_refill(sc); @@ -2033,9 +2009,8 @@ g_raid_md_fail_disk_promise(struct g_rai /* Write updated metadata to remaining disks. */ g_raid_md_write_promise(md, NULL, NULL, tdisk); - /* Check if anything left except placeholders. */ - if (g_raid_ndisks(sc, -1) == - g_raid_ndisks(sc, G_RAID_DISK_S_OFFLINE)) + /* Check if anything left. */ + if (g_raid_ndisks(sc, -1) == 0) g_raid_destroy_node(sc, 0); else g_raid_md_promise_refill(sc);