From nobody@FreeBSD.org  Mon Jun 14 14:14:01 2010
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id BCFD21065673
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 14 Jun 2010 14:14:01 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id AD7BC8FC1E
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 14 Jun 2010 14:14:01 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o5EEE1kj024460
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 14 Jun 2010 14:14:01 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id o5EEE1Vk024459;
	Mon, 14 Jun 2010 14:14:01 GMT
	(envelope-from nobody)
Message-Id: <201006141414.o5EEE1Vk024459@www.freebsd.org>
Date: Mon, 14 Jun 2010 14:14:01 GMT
From: Bruce Cran <bruce@cran.org.uk>
To: freebsd-gnats-submit@FreeBSD.org
Subject: graid3 panic: wrong offset 16384 for sectorsize 65536
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         147852
>Category:       kern
>Synopsis:       [geom] [panic] graid3 panic: wrong offset 16384 for sectorsize 65536
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    ae
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jun 14 14:20:02 UTC 2010
>Closed-Date:    Sat Feb 05 14:32:16 UTC 2011
>Last-Modified:  Fri Feb 11 06:00:25 UTC 2011
>Originator:     Bruce Cran
>Release:        9.0-HEAD-20100610-JPSNAP
>Organization:
>Environment:
9.0-CURRENT 20100610 amd64
>Description:
When trying to put a ZFS pool onto a graid3 volume with a blocksize of 32768, the system panics with:

panic: wrong offset 16384 for sectorsize 65536

kdb_enter()
panic()
g_io_request()
vdev_geom_io_start()
zio_execute()
vdev_label_read_config()
vdev_label_init()
vdev_label_init()
vdev_create()
spa_create()
zfs_ioc_pool_create()
zfsdev_ioctl()
devfs_ioctl_f()
kern_ioctl()
ioctl()
syscallenter()
Xfast_syscall()
>How-To-Repeat:
graid3 label -v -h -r -s 32768 home ada1 ada2 ada3
zpool create home /dev/raid3/home
>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-geom 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Tue Jun 15 01:23:44 UTC 2010 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=147852 

From: Bruce Cran <bruce@cran.org.uk>
To: bug-followup@FreeBSD.org, bruce@cran.org.uk
Cc:  
Subject: Re: kern/147852: [geom] [panic] graid3 panic: wrong offset 16384
 for sectorsize 65536
Date: Wed, 15 Sep 2010 09:50:33 +0100

 I just got the same panic on a gnop device created with a sectorsize of
 4KB installed on a 1TB WD EARS HDD, which appears to be related to
 glabel:
 
 GEOM_NOP: Device ada3p2 created.
 panic: wrong offset 1000070622720 for sectorsize 4096.
 
 g_io_request
 g_io_data
 g_label_taste
 g_new_provider_event
 g_run_events
 g_event_procbody
 fork_exit
 fork_trampoline
 
 -- 
 Bruce Cran
Responsible-Changed-From-To: freebsd-geom->ae 
Responsible-Changed-By: ae 
Responsible-Changed-When: Tue Jan 11 10:16:47 UTC 2011 
Responsible-Changed-Why:  
Take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=147852 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/147852: commit references a PR
Date: Tue, 11 Jan 2011 11:42:29 +0000 (UTC)

 Author: ae
 Date: Tue Jan 11 11:42:22 2011
 New Revision: 217262
 URL: http://svn.freebsd.org/changeset/base/217262
 
 Log:
   Round GNOP provider's mediasize to its sectorsize. This prevents KASSERT
   in g_io_request when geom classes doing tasting.
   
   PR:		kern/147852
   MFC after:	1 week
 
 Modified:
   head/sys/geom/nop/g_nop.c
 
 Modified: head/sys/geom/nop/g_nop.c
 ==============================================================================
 --- head/sys/geom/nop/g_nop.c	Tue Jan 11 11:01:29 2011	(r217261)
 +++ head/sys/geom/nop/g_nop.c	Tue Jan 11 11:42:22 2011	(r217262)
 @@ -176,6 +176,8 @@ g_nop_create(struct gctl_req *req, struc
  		gctl_error(req, "Invalid secsize for provider %s.", pp->name);
  		return (EINVAL);
  	}
 +	if (size % secsize != 0)
 +		size -= size % secsize;
  	snprintf(name, sizeof(name), "%s%s", pp->name, G_NOP_SUFFIX);
  	LIST_FOREACH(gp, &mp->geom, geom) {
  		if (strcmp(gp->name, name) == 0) {
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/147852: commit references a PR
Date: Tue, 18 Jan 2011 06:25:00 +0000 (UTC)

 Author: ae
 Date: Tue Jan 18 06:24:52 2011
 New Revision: 217530
 URL: http://svn.freebsd.org/changeset/base/217530
 
 Log:
   MFC r217262:
     Round GNOP provider's mediasize to its sectorsize. This prevents KASSERT
     in g_io_request when geom classes doing tasting.
   
     PR:		kern/147852
   
   MFC r217263:
     Remove redundant check.
 
 Modified:
   stable/8/sys/geom/nop/g_nop.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/geom/nop/g_nop.c
 ==============================================================================
 --- stable/8/sys/geom/nop/g_nop.c	Tue Jan 18 04:54:43 2011	(r217529)
 +++ stable/8/sys/geom/nop/g_nop.c	Tue Jan 18 06:24:52 2011	(r217530)
 @@ -176,6 +176,7 @@ g_nop_create(struct gctl_req *req, struc
  		gctl_error(req, "Invalid secsize for provider %s.", pp->name);
  		return (EINVAL);
  	}
 +	size -= size % secsize;
  	snprintf(name, sizeof(name), "%s%s", pp->name, G_NOP_SUFFIX);
  	LIST_FOREACH(gp, &mp->geom, geom) {
  		if (strcmp(gp->name, name) == 0) {
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/147852: commit references a PR
Date: Fri,  4 Feb 2011 15:23:02 +0000 (UTC)

 Author: ae
 Date: Fri Feb  4 15:22:56 2011
 New Revision: 218278
 URL: http://svn.freebsd.org/changeset/base/218278
 
 Log:
   vdev's sectorsize should not be greater than 8 Kbytes and also
   it should be power of 2. This prevents non-aligned access while
   probing vdev's labels.
   
   PR:		kern/147852
   Reviewed by:	pjd
   MFC after:	1 week
 
 Modified:
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
 
 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
 ==============================================================================
 --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Fri Feb  4 14:44:59 2011	(r218277)
 +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Fri Feb  4 15:22:56 2011	(r218278)
 @@ -393,7 +393,8 @@ vdev_geom_open_by_path(vdev_t *vd, int c
  	if (pp != NULL) {
  		ZFS_LOG(1, "Found provider by name %s.", vd->vdev_path);
  		cp = vdev_geom_attach(pp);
 -		if (cp != NULL && check_guid) {
 +		if (cp != NULL && check_guid && ISP2(pp->sectorsize) &&
 +		    pp->sectorsize <= VDEV_PAD_SIZE) {
  			g_topology_unlock();
  			guid = vdev_geom_read_guid(cp);
  			g_topology_lock();
 @@ -457,6 +458,17 @@ vdev_geom_open(vdev_t *vd, uint64_t *psi
  	if (cp == NULL) {
  		ZFS_LOG(1, "Provider %s not found.", vd->vdev_path);
  		error = ENOENT;
 +	} else if (cp->provider->sectorsize > VDEV_PAD_SIZE ||
 +	    !ISP2(cp->provider->sectorsize)) {
 +		ZFS_LOG(1, "Provider %s has unsupported sectorsize.",
 +		    vd->vdev_path);
 +
 +		g_topology_lock();
 +		vdev_geom_detach(cp, 0);
 +		g_topology_unlock();
 +
 +		error = EINVAL;
 +		cp = NULL;
  	} else if (cp->acw == 0 && (spa_mode(vd->vdev_spa) & FWRITE) != 0) {
  		int i;
  
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->closed 
State-Changed-By: ae 
State-Changed-When: Sat Feb 5 14:30:18 UTC 2011 
State-Changed-Why:  
Fixed in head/. Fix will be MFC'ed in stable/8 soon. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=147852 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/147852: commit references a PR
Date: Fri, 11 Feb 2011 05:56:21 +0000 (UTC)

 Author: ae
 Date: Fri Feb 11 05:56:14 2011
 New Revision: 218541
 URL: http://svn.freebsd.org/changeset/base/218541
 
 Log:
   MFC r218278:
     vdev's sectorsize should not be greater than 8 Kbytes and also
     it should be power of 2. This prevents non-aligned access while
     probing vdev's labels.
   
     PR:		kern/147852
 
 Modified:
   stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
 ==============================================================================
 --- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Fri Feb 11 05:54:46 2011	(r218540)
 +++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Fri Feb 11 05:56:14 2011	(r218541)
 @@ -392,7 +392,8 @@ vdev_geom_open_by_path(vdev_t *vd, int c
  	if (pp != NULL) {
  		ZFS_LOG(1, "Found provider by name %s.", vd->vdev_path);
  		cp = vdev_geom_attach(pp);
 -		if (cp != NULL && check_guid) {
 +		if (cp != NULL && check_guid && ISP2(pp->sectorsize) &&
 +		    pp->sectorsize <= VDEV_PAD_SIZE) {
  			g_topology_unlock();
  			guid = vdev_geom_read_guid(cp);
  			g_topology_lock();
 @@ -456,6 +457,17 @@ vdev_geom_open(vdev_t *vd, uint64_t *psi
  	if (cp == NULL) {
  		ZFS_LOG(1, "Provider %s not found.", vd->vdev_path);
  		error = ENOENT;
 +	} else if (cp->provider->sectorsize > VDEV_PAD_SIZE ||
 +	    !ISP2(cp->provider->sectorsize)) {
 +		ZFS_LOG(1, "Provider %s has unsupported sectorsize.",
 +		    vd->vdev_path);
 +
 +		g_topology_lock();
 +		vdev_geom_detach(cp, 0);
 +		g_topology_unlock();
 +
 +		error = EINVAL;
 +		cp = NULL;
  	} else if (cp->acw == 0 && (spa_mode(vd->vdev_spa) & FWRITE) != 0) {
  		int i;
  
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
>Unformatted:
