From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 15:04:01 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 2BC651065673; Wed, 16 Feb 2011 15:04:01 +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 1BE608FC1E; Wed, 16 Feb 2011 15:04:01 +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 p1GF40mu073757; Wed, 16 Feb 2011 15:04:00 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1GF40rR073752; Wed, 16 Feb 2011 15:04:00 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102161504.p1GF40rR073752@svn.freebsd.org> From: Alexander Motin Date: Wed, 16 Feb 2011 15:04:00 +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: r218734 - 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 15:04:01 -0000 Author: mav Date: Wed Feb 16 15:04:00 2011 New Revision: 218734 URL: http://svn.freebsd.org/changeset/base/218734 Log: Add and use helper function opening disk by name. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h 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:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/g_raid.c Wed Feb 16 15:04:00 2011 (r218734) @@ -585,6 +585,32 @@ g_raid_get_subdisk(struct g_raid_volume return (NULL); } +struct g_consumer * +g_raid_open_consumer(struct g_raid_softc *sc, const char *name) +{ + struct g_consumer *cp; + struct g_provider *pp; + + g_topology_assert(); + + if (strncmp(name, "/dev/", 5) == 0) + name += 5; + pp = g_provider_by_name(name); + if (pp == NULL) + return (NULL); + cp = g_new_consumer(sc->sc_geom); + if (g_attach(cp, pp) != 0) { + g_destroy_consumer(cp); + return (NULL); + } + if (g_access(cp, 1, 1, 1) != 0) { + g_detach(cp); + g_destroy_consumer(cp); + return (NULL); + } + return (cp); +} + static u_int g_raid_nrequests(struct g_raid_softc *sc, struct g_consumer *cp) { Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Wed Feb 16 14:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/g_raid.h Wed Feb 16 15:04:00 2011 (r218734) @@ -364,6 +364,8 @@ void g_raid_subdisk_iostart(struct g_rai int g_raid_subdisk_kerneldump(struct g_raid_subdisk *sd, void *virtual, vm_offset_t physical, off_t offset, size_t length); +struct g_consumer *g_raid_open_consumer(struct g_raid_softc *sc, + const char *name); void g_raid_kill_consumer(struct g_raid_softc *sc, struct g_consumer *cp); void g_raid_report_disk_state(struct g_raid_disk *disk); Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 14:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 15:04:00 2011 (r218734) @@ -1426,38 +1426,18 @@ g_raid_md_ctl_intel(struct g_raid_md_obj if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - break; - } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", + diskname); + g_topology_unlock(); + error = -4; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; disk = g_raid_create_disk(sc); @@ -1465,13 +1445,11 @@ makedisk: disk->d_consumer = cp; if (cp == NULL) { strcpy(&pd->pd_disk_meta.serial[0], "NONE"); - pd->pd_disk_meta.id = 0; pd->pd_disk_meta.id = 0xffffffff; pd->pd_disk_meta.flags = INTEL_F_ASSIGNED; continue; } cp->private = disk; - g_topology_unlock(); error = g_raid_md_get_label(cp, @@ -1948,37 +1926,18 @@ makedisk: error = -3; break; } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; /* Try to find provider with specified name. */ g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", diskname); g_topology_unlock(); error = -4; break; } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -5; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -6; - break; - } + pp = cp->provider; g_topology_unlock(); /* Read disk serial. */ Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 14:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 15:04:00 2011 (r218734) @@ -1085,38 +1085,18 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - break; - } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open '%s'.", + diskname); + g_topology_unlock(); + error = -7; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; @@ -1126,7 +1106,6 @@ makedisk: if (cp == NULL) continue; cp->private = disk; - g_topology_unlock(); /* Read kernel dumping information. */ @@ -1359,38 +1338,18 @@ makedisk: error = -3; break; } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; /* Try to find provider with specified name. */ g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", diskname); g_topology_unlock(); error = -4; break; } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -5; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -6; - break; - } - g_topology_unlock(); + pp = cp->provider; pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = -3; @@ -1402,6 +1361,7 @@ makedisk: disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; + g_topology_unlock(); /* Read kernel dumping information. */ disk->d_kd.offset = 0;