kern/148540: [geom] geom_sched breaks ata devices

Andrey V. Elsukov bu7cher at yandex.ru
Wed Jul 14 13:00:09 UTC 2010


The following reply was made to PR kern/148540; it has been noted by GNATS.

From: "Andrey V. Elsukov" <bu7cher at yandex.ru>
To: bug-followup at FreeBSD.org, 
 Marcin Wisnicki <mwisnicki+freebsd at gmail.com>,
 "Anton A. Barsukov" <iscsi at zesdid.com>
Cc: Luigi Rizzo <luigi at 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--


More information about the freebsd-geom mailing list