From nobody@FreeBSD.org  Tue Jul 13 10:06:54 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 C4BEB106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 13 Jul 2010 10:06:54 +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 B91D78FC16
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 13 Jul 2010 10:06:54 +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 o6DA6sTP041552
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 13 Jul 2010 10:06:54 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id o6DA6sUR041551;
	Tue, 13 Jul 2010 10:06:54 GMT
	(envelope-from nobody)
Message-Id: <201007131006.o6DA6sUR041551@www.freebsd.org>
Date: Tue, 13 Jul 2010 10:06:54 GMT
From: Marcin Wisnicki <mwisnicki+freebsd@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: geom_sched breaks ata devices
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         148540
>Category:       kern
>Synopsis:       [geom] geom_sched breaks ata devices
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-geom
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jul 13 10:10:00 UTC 2010
>Closed-Date:    Mon Aug 16 08:54:15 UTC 2010
>Last-Modified:  Mon Aug 16 09:00:06 UTC 2010
>Originator:     Marcin Wisnicki
>Release:        8.1-PRERELEASE
>Organization:
>Environment:
FreeBSD ghost.pnet.one.pl 8.1-PRERELEASE FreeBSD 8.1-PRERELEASE #3: Sun Jun  6 21:14:57 CEST 2010     root@ghost.pnet.one.pl:/home/obj/usr/src/sys/SERWER_DDB  i386
>Description:
Inserting geom_sched to ata(4) device causes this device to no longer
respond to ata ioctls (atacontrol, smartctlm etc.).
CAM devices (at least umass) seem to work fine.
>How-To-Repeat:
# atacontrol mode ad0
current mode = UDMA133
# gsched insert -a rr ad0
GEOM_SCHED: Device ad0.sched. created.
# atacontrol mode ad0
atacontrol: ioctl(IOCATAGMODE): Inappropriate ioctl for device

>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-geom 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Tue Jul 13 13:05:58 UTC 2010 
Responsible-Changed-Why:  
Over to maintainer(s). 

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

From: "Anton A. Barsukov" <iscsi@zesdid.com>
To: bug-followup@FreeBSD.org, mwisnicki+freebsd@gmail.com
Cc:  
Subject: Re: kern/148540: [geom] geom_sched breaks ata devices
Date: Wed, 14 Jul 2010 11:55:24 +0600

 [root@backup /root]# atacontrol list
 ATA channel 2:
     Master:      no device present
     Slave:  acd0 <DVD-ROM UJDA780/1.50> ATA/ATAPI revision 7
 ATA channel 3:
     Master:  ad6 <ST31000528AS/CC35> SATA revision 2.x
     Slave:       no device present
 ATA channel 4:
     Master:  ad8 <ST31000528AS/CC35> SATA revision 2.x
     Slave:       no device present
 ATA channel 5:
     Master: ad10 <ST31000528AS/CC35> SATA revision 2.x
     Slave:       no device present
 ATA channel 6:
     Master: ad12 <ST31000528AS/CC35> SATA revision 2.x
     Slave:       no device present
 ATA channel 7:
     Master:      no device present
     Slave:       no device present
 ATA channel 8:
     Master:      no device present
     Slave:       no device present
 [root@backup /root]# geom sched insert -a rr ad6
 [root@backup /root]# geom sched insert -a rr ad8
 [root@backup /root]# geom sched insert -a rr ad10
 [root@backup /root]# geom sched insert -a rr ad12
 [root@backup /root]# atacontrol mode ad6
 atacontrol: ioctl(IOCATAGMODE): Inappropriate ioctl for device
 [root@backup /root]# uname -srm
 FreeBSD 8.1-PRERELEASE amd64
 [root@backup /root]# 
 
 

From: "Andrey V. Elsukov" <bu7cher@yandex.ru>
To: bug-followup@FreeBSD.org, 
 Marcin Wisnicki <mwisnicki+freebsd@gmail.com>,
 "Anton A. Barsukov" <iscsi@zesdid.com>
Cc: Luigi Rizzo <luigi@FreeBSD.org>
Subject: Re: kern/148540: [geom] geom_sched breaks ata devices
Date: Wed, 14 Jul 2010 16:50:57 +0400

 This is a multi-part message in MIME format.
 --------------020306060809080006020605
 Content-Type: text/plain; charset=KOI8-R
 Content-Transfer-Encoding: 7bit
 
 Hi,
 
 can you test attached patch?
 
 -- 
 WBR, Andrey V. Elsukov
 
 --------------020306060809080006020605
 Content-Type: text/plain;
  name="gsched.diff"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment;
  filename="gsched.diff"
 
 Index: g_sched.c
 ===================================================================
 --- g_sched.c	(revision 209715)
 +++ g_sched.c	(working copy)
 @@ -136,6 +136,8 @@ static void g_sched_dumpconf(struct sbuf *sb, cons
      struct g_geom *gp, struct g_consumer *cp, struct g_provider *pp);
  static void g_sched_init(struct g_class *mp);
  static void g_sched_fini(struct g_class *mp);
 +static int g_sched_ioctl(struct g_provider *pp, u_long cmd, void * data,
 +    int fflag, struct thread *td);
  
  struct g_class g_sched_class = {
  	.name = G_SCHED_CLASS_NAME,
 @@ -144,6 +146,7 @@ struct g_class g_sched_class = {
  	.taste = g_sched_taste,
  	.destroy_geom = g_sched_destroy_geom,
  	.init = g_sched_init,
 +	.ioctl = g_sched_ioctl,
  	.fini = g_sched_fini
  };
  
 @@ -1601,6 +1604,25 @@ g_sched_fini(struct g_class *mp)
  	mtx_destroy(&me.gs_mtx);
  }
  
 +static int
 +g_sched_ioctl(struct g_provider *pp, u_long cmd, void * data, int fflag,
 +    struct thread *td)
 +{
 +	struct g_consumer *cp;
 +	struct g_geom *gp;
 +	int error;
 +
 +	cp = LIST_FIRST(&pp->geom->consumer);
 +	if (cp == NULL)
 +		return (ENOIOCTL);
 +
 +	gp = cp->provider->geom;
 +	if (gp->ioctl == NULL)
 +		return (ENOIOCTL);
 +	error = gp->ioctl(cp->provider, cmd, data, fflag, td);
 +	return(error);
 +}
 +
  /*
   * Read the i-th argument for a request, skipping the /dev/
   * prefix if present.
 
 --------------020306060809080006020605--

From: Marcin Wisnicki <mwisnicki+freebsd@gmail.com>
To: "Andrey V. Elsukov" <bu7cher@yandex.ru>
Cc: bug-followup@freebsd.org, "Anton A. Barsukov" <iscsi@zesdid.com>, 
	Luigi Rizzo <luigi@freebsd.org>
Subject: Re: kern/148540: [geom] geom_sched breaks ata devices
Date: Wed, 14 Jul 2010 16:32:49 +0200

 2010/7/14 Andrey V. Elsukov <bu7cher@yandex.ru>:
 > Hi,
 >
 > can you test attached patch?
 >
 
 Forwarding ioctls works but I'm thinking that maybe gsched should
 insert itself as a sibling to DEV and reattach all non-DEV consumers
 (though that would mean you could bypass scheduler by directly opening
 device).
 Something like this:
 http://wisnia21.freeshell.org/f/freebsd/geom_sched-insertion.png

From: Marcin Wisnicki <mwisnicki+freebsd@gmail.com>
To: "Andrey V. Elsukov" <bu7cher@yandex.ru>
Cc: bug-followup@freebsd.org, "Anton A. Barsukov" <iscsi@zesdid.com>, 
	Luigi Rizzo <luigi@freebsd.org>
Subject: Re: kern/148540: [geom] geom_sched breaks ata devices
Date: Thu, 15 Jul 2010 16:06:01 +0200

 On Wed, Jul 14, 2010 at 16:32, Marcin Wisnicki
 <mwisnicki+freebsd@gmail.com> wrote:
 > 2010/7/14 Andrey V. Elsukov <bu7cher@yandex.ru>:
 >> Hi,
 >>
 >> can you test attached patch?
 >>
 >
 > Forwarding ioctls works but I'm thinking that maybe gsched should
 > insert itself as a sibling to DEV and reattach all non-DEV consumers
 > (though that would mean you could bypass scheduler by directly opening
 > device).
 > Something like this:
 > http://wisnia21.freeshell.org/f/freebsd/geom_sched-insertion.png
 >
 
 One more thing. Currently gsched messes up names of disk geoms;
 
 # geom disk status
       Name  Status  Components
 ad0.sched.     N/A  N/A
        ad1     N/A  N/A
        cd0     N/A  N/A
        da0     N/A  N/A
        da1     N/A  N/A
 
 # sysctl -b kern.geom.conftxt | grep -a DISK
 0 DISK da1 4060086272 512 hd 255 sc 63
 0 DISK da0 1000204886016 512 hd 255 sc 63
 0 DISK cd0 0 2048 hd 0 sc 0
 0 DISK ad1 120034123776 512 hd 16 sc 255
 0 DISK ad0.sched. 41109061120 512 hd 16 sc 255
 
 Besides not looking good it breaks tools that use this information
 (like causing sade and sysinstall to segfault).
 
 Or maybe it is a bug of geom(8)-status and kern.geom.conftxt ?
 It seems like they print name of geom provider instead of the name of geom.
 
 ghost# geom disk status ad0
       Name  Status  Components
 ad0.sched.     N/A  N/A
 ghost# geom disk status ad0.sched.
 geom: No such geom: ad0.sched..
 ghost# geom disk list ad0.sched.
 geom: No such geom: ad0.sched..
 ghost# geom disk list ad0
 Geom name: ad0
 Providers:
 1. Name: ad0.sched.
    Mediasize: 41109061120 (38G)
    Sectorsize: 512
    Mode: r7w7e21
    fwsectors: 255
    fwheads: 16

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/148540: commit references a PR
Date: Mon,  2 Aug 2010 10:31:02 +0000 (UTC)

 Author: ae
 Date: Mon Aug  2 10:30:49 2010
 New Revision: 210747
 URL: http://svn.freebsd.org/changeset/base/210747
 
 Log:
   Forward ioctl requests to original geom.
   
   PR:		148540
   Silence from:	luigi
   Reviewed by:	pjd
   Approved by:	mav (mentor)
   MFC after:	2 weeks
 
 Modified:
   head/sys/geom/sched/g_sched.c
 
 Modified: head/sys/geom/sched/g_sched.c
 ==============================================================================
 --- head/sys/geom/sched/g_sched.c	Mon Aug  2 10:26:15 2010	(r210746)
 +++ head/sys/geom/sched/g_sched.c	Mon Aug  2 10:30:49 2010	(r210747)
 @@ -136,6 +136,8 @@ static void g_sched_dumpconf(struct sbuf
      struct g_geom *gp, struct g_consumer *cp, struct g_provider *pp);
  static void g_sched_init(struct g_class *mp);
  static void g_sched_fini(struct g_class *mp);
 +static int g_sched_ioctl(struct g_provider *pp, u_long cmd, void *data,
 +    int fflag, struct thread *td);
  
  struct g_class g_sched_class = {
  	.name = G_SCHED_CLASS_NAME,
 @@ -144,6 +146,7 @@ struct g_class g_sched_class = {
  	.taste = g_sched_taste,
  	.destroy_geom = g_sched_destroy_geom,
  	.init = g_sched_init,
 +	.ioctl = g_sched_ioctl,
  	.fini = g_sched_fini
  };
  
 @@ -1601,6 +1604,22 @@ g_sched_fini(struct g_class *mp)
  	mtx_destroy(&me.gs_mtx);
  }
  
 +static int
 +g_sched_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag,
 +    struct thread *td)
 +{
 +	struct g_consumer *cp;
 +	struct g_geom *gp;
 +
 +	cp = LIST_FIRST(&pp->geom->consumer);
 +	if (cp == NULL)
 +		return (ENOIOCTL);
 +	gp = cp->provider->geom;
 +	if (gp->ioctl == NULL)
 +		return (ENOIOCTL);
 +	return (gp->ioctl(cp->provider, cmd, data, fflag, td));
 +}
 +
  /*
   * Read the i-th argument for a request, skipping the /dev/
   * prefix if present.
 _______________________________________________
 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->patched 
State-Changed-By: ae 
State-Changed-When: Mon Aug 2 12:14:52 UTC 2010 
State-Changed-Why:  
Patched in head/. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=148540 
State-Changed-From-To: patched->closed 
State-Changed-By: ae 
State-Changed-When: Mon Aug 16 08:53:50 UTC 2010 
State-Changed-Why:  
Merged to stable/8. 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/148540: commit references a PR
Date: Mon, 16 Aug 2010 08:51:45 +0000 (UTC)

 Author: ae
 Date: Mon Aug 16 08:51:35 2010
 New Revision: 211391
 URL: http://svn.freebsd.org/changeset/base/211391
 
 Log:
   MFC r210747:
     Forward ioctl requests to original geom.
   
     PR:		148540
   Approved by:	kib (mentor)
 
 Modified:
   stable/8/sys/geom/sched/g_sched.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cam/   (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)
   stable/8/sys/dev/e1000/   (props changed)
   stable/8/sys/dev/xen/xenpci/   (props changed)
 
 Modified: stable/8/sys/geom/sched/g_sched.c
 ==============================================================================
 --- stable/8/sys/geom/sched/g_sched.c	Mon Aug 16 08:48:39 2010	(r211390)
 +++ stable/8/sys/geom/sched/g_sched.c	Mon Aug 16 08:51:35 2010	(r211391)
 @@ -136,6 +136,8 @@ static void g_sched_dumpconf(struct sbuf
      struct g_geom *gp, struct g_consumer *cp, struct g_provider *pp);
  static void g_sched_init(struct g_class *mp);
  static void g_sched_fini(struct g_class *mp);
 +static int g_sched_ioctl(struct g_provider *pp, u_long cmd, void *data,
 +    int fflag, struct thread *td);
  
  struct g_class g_sched_class = {
  	.name = G_SCHED_CLASS_NAME,
 @@ -144,6 +146,7 @@ struct g_class g_sched_class = {
  	.taste = g_sched_taste,
  	.destroy_geom = g_sched_destroy_geom,
  	.init = g_sched_init,
 +	.ioctl = g_sched_ioctl,
  	.fini = g_sched_fini
  };
  
 @@ -1601,6 +1604,22 @@ g_sched_fini(struct g_class *mp)
  	mtx_destroy(&me.gs_mtx);
  }
  
 +static int
 +g_sched_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag,
 +    struct thread *td)
 +{
 +	struct g_consumer *cp;
 +	struct g_geom *gp;
 +
 +	cp = LIST_FIRST(&pp->geom->consumer);
 +	if (cp == NULL)
 +		return (ENOIOCTL);
 +	gp = cp->provider->geom;
 +	if (gp->ioctl == NULL)
 +		return (ENOIOCTL);
 +	return (gp->ioctl(cp->provider, cmd, data, fflag, td));
 +}
 +
  /*
   * Read the i-th argument for a request, skipping the /dev/
   * prefix if present.
 _______________________________________________
 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:
