From owner-svn-src-head@FreeBSD.ORG Sat Jul 7 21:28:32 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 15092106566B; Sat, 7 Jul 2012 21:28:32 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DA9AD8FC08; Sat, 7 Jul 2012 21:28:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q67LSVGe089359; Sat, 7 Jul 2012 21:28:31 GMT (envelope-from trasz@svn.freebsd.org) Received: (from trasz@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q67LSVGh089356; Sat, 7 Jul 2012 21:28:31 GMT (envelope-from trasz@svn.freebsd.org) Message-Id: <201207072128.q67LSVGh089356@svn.freebsd.org> From: Edward Tomasz Napierala Date: Sat, 7 Jul 2012 21:28:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r238216 - head/sys/geom X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jul 2012 21:28:32 -0000 Author: trasz Date: Sat Jul 7 21:28:31 2012 New Revision: 238216 URL: http://svn.freebsd.org/changeset/base/238216 Log: Add disk_resize(), to make it possible for the disk drivers such as da(4) to notify GEOM about LUN size change. Reviewed by: mav (earlier version) Sponsored by: FreeBSD Foundation Modified: head/sys/geom/geom_disk.c head/sys/geom/geom_disk.h Modified: head/sys/geom/geom_disk.c ============================================================================== --- head/sys/geom/geom_disk.c Sat Jul 7 20:32:21 2012 (r238215) +++ head/sys/geom/geom_disk.c Sat Jul 7 21:28:31 2012 (r238216) @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -65,6 +66,7 @@ struct g_disk_softc { struct sysctl_oid *sysctl_tree; char led[64]; uint32_t state; + struct task resize_task; }; static struct mtx g_disk_done_mtx; @@ -445,6 +447,27 @@ g_disk_dumpconf(struct sbuf *sb, const c } static void +g_disk_resize_task(void *context, int pending) +{ + struct g_geom *gp; + struct g_provider *pp; + struct disk *dp; + struct g_disk_softc *sc; + + sc = (struct g_disk_softc *)context; + dp = sc->dp; + gp = dp->d_geom; + + LIST_FOREACH(pp, &gp->provider, provider) { + if (pp->sectorsize != 0 && + pp->sectorsize != dp->d_sectorsize) + g_wither_provider(pp, ENXIO); + else + g_resize_provider(pp, dp->d_mediasize); + } +} + +static void g_disk_create(void *arg, int flag) { struct g_geom *gp; @@ -484,6 +507,7 @@ g_disk_create(void *arg, int flag) CTLFLAG_RW | CTLFLAG_TUN, sc->led, sizeof(sc->led), "LED name"); } + TASK_INIT(&sc->resize_task, 0, g_disk_resize_task, sc); pp->private = sc; dp->d_geom = gp; g_error_provider(pp, 0); @@ -635,6 +659,24 @@ disk_attr_changed(struct disk *dp, const (void)g_attr_changed(pp, attr, flag); } +void +disk_resize(struct disk *dp) +{ + struct g_geom *gp; + struct g_disk_softc *sc; + int error; + + gp = dp->d_geom; + + if (gp == NULL) + return; + + sc = gp->softc; + + error = taskqueue_enqueue(taskqueue_thread, &sc->resize_task); + KASSERT(error == 0, ("taskqueue_enqueue(9) failed.")); +} + static void g_kern_disks(void *p, int flag __unused) { Modified: head/sys/geom/geom_disk.h ============================================================================== --- head/sys/geom/geom_disk.h Sat Jul 7 20:32:21 2012 (r238215) +++ head/sys/geom/geom_disk.h Sat Jul 7 21:28:31 2012 (r238216) @@ -109,6 +109,7 @@ void disk_create(struct disk *disk, int void disk_destroy(struct disk *disk); void disk_gone(struct disk *disk); void disk_attr_changed(struct disk *dp, const char *attr, int flag); +void disk_resize(struct disk *dp); #define DISK_VERSION_00 0x58561059 #define DISK_VERSION_01 0x5856105a