public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch 0/3] clean gendisk out of scsi ULD structs
@ 2007-07-05 21:06 Kristen Carlson Accardi
  2007-07-05 22:09 ` Douglas Gilbert
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Kristen Carlson Accardi @ 2007-07-05 21:06 UTC (permalink / raw)
  To: James.Bottomley; +Cc: akpm, jeff, linux-scsi, linux-kernel

Since gendisk will now become part of struct scsi_device, we don't need
to store this value in any private data structs where they already store
scsi_device.  This series cleans up a few drivers which did this.

Kristen

-- 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 0/3] clean gendisk out of scsi ULD structs
  2007-07-05 21:06 [patch 0/3] clean gendisk out of scsi ULD structs Kristen Carlson Accardi
@ 2007-07-05 22:09 ` Douglas Gilbert
  2007-07-05 23:03   ` Al Viro
  2007-07-05 23:02 ` Al Viro
  2007-07-06 20:02 ` James Bottomley
  2 siblings, 1 reply; 8+ messages in thread
From: Douglas Gilbert @ 2007-07-05 22:09 UTC (permalink / raw)
  To: Kristen Carlson Accardi
  Cc: James.Bottomley, akpm, jeff, linux-scsi, linux-kernel

Kristen Carlson Accardi wrote:
> Since gendisk will now become part of struct scsi_device, we don't need
> to store this value in any private data structs where they already store
> scsi_device.  This series cleans up a few drivers which did this.

Since a scsi_device object is usually a SCSI logical unit,
one wonders why it would contain a gendisk object. Logical
units aren't necessarily disks, they might be enclosures or
just place holders that respond to an INQUIRY (e.g. lun=0
when the enclosing target has other active lus whose lun!=0).

Doug Gilbert

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 0/3] clean gendisk out of scsi ULD structs
  2007-07-05 21:06 [patch 0/3] clean gendisk out of scsi ULD structs Kristen Carlson Accardi
  2007-07-05 22:09 ` Douglas Gilbert
@ 2007-07-05 23:02 ` Al Viro
  2007-07-05 23:14   ` James Bottomley
  2007-07-06 20:02 ` James Bottomley
  2 siblings, 1 reply; 8+ messages in thread
From: Al Viro @ 2007-07-05 23:02 UTC (permalink / raw)
  To: Kristen Carlson Accardi
  Cc: James.Bottomley, akpm, jeff, linux-scsi, linux-kernel

On Thu, Jul 05, 2007 at 02:06:36PM -0700, Kristen Carlson Accardi wrote:
> Since gendisk will now become part of struct scsi_device, we don't need
> to store this value in any private data structs where they already store
> scsi_device.  This series cleans up a few drivers which did this.

What the hell?  gendisks are *NOT* supposed to be embedded into other
data structures, you'll screw up the lifetime rules for them.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 0/3] clean gendisk out of scsi ULD structs
  2007-07-05 22:09 ` Douglas Gilbert
@ 2007-07-05 23:03   ` Al Viro
  0 siblings, 0 replies; 8+ messages in thread
From: Al Viro @ 2007-07-05 23:03 UTC (permalink / raw)
  To: Douglas Gilbert
  Cc: Kristen Carlson Accardi, James.Bottomley, akpm, jeff, linux-scsi,
	linux-kernel

On Thu, Jul 05, 2007 at 06:09:27PM -0400, Douglas Gilbert wrote:
> Since a scsi_device object is usually a SCSI logical unit,
> one wonders why it would contain a gendisk object. Logical
> units aren't necessarily disks, they might be enclosures or
> just place holders that respond to an INQUIRY (e.g. lun=0
> when the enclosing target has other active lus whose lun!=0).

gendisk is just a tag for requests coming into given queue.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 0/3] clean gendisk out of scsi ULD structs
  2007-07-05 23:02 ` Al Viro
@ 2007-07-05 23:14   ` James Bottomley
  0 siblings, 0 replies; 8+ messages in thread
From: James Bottomley @ 2007-07-05 23:14 UTC (permalink / raw)
  To: Al Viro; +Cc: Kristen Carlson Accardi, akpm, jeff, linux-scsi, linux-kernel

On Fri, 2007-07-06 at 00:02 +0100, Al Viro wrote:
> On Thu, Jul 05, 2007 at 02:06:36PM -0700, Kristen Carlson Accardi wrote:
> > Since gendisk will now become part of struct scsi_device, we don't need
> > to store this value in any private data structs where they already store
> > scsi_device.  This series cleans up a few drivers which did this.
> 
> What the hell?  gendisks are *NOT* supposed to be embedded into other
> data structures, you'll screw up the lifetime rules for them.

Don't panic .. they're not ... we have a pointer to the gendisk in our
SCSI structures (properly refcounted).  The reason is historical and
actually goes back to 2002 when we first got rid of the static arrays of
structures we used to keep around.

Doug ... don't think 'disk' when you see 'gendisk' just think of it as a
useful infrastructure library.

James



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 0/3] clean gendisk out of scsi ULD structs
  2007-07-05 21:06 [patch 0/3] clean gendisk out of scsi ULD structs Kristen Carlson Accardi
  2007-07-05 22:09 ` Douglas Gilbert
  2007-07-05 23:02 ` Al Viro
@ 2007-07-06 20:02 ` James Bottomley
  2007-07-07  3:25   ` Douglas Gilbert
  2 siblings, 1 reply; 8+ messages in thread
From: James Bottomley @ 2007-07-06 20:02 UTC (permalink / raw)
  To: Kristen Carlson Accardi; +Cc: akpm, jeff, linux-scsi, linux-kernel

On Thu, 2007-07-05 at 14:06 -0700, Kristen Carlson Accardi wrote:
> Since gendisk will now become part of struct scsi_device, we don't need
> to store this value in any private data structs where they already store
> scsi_device.  This series cleans up a few drivers which did this.

Actually, as Al pointed out, we do have lifetime rules issues with doing
this.  The problem is that gendisk itself always has a shorter lifetime
than scsi_device (not much shorter, usually, but if you execute a legal
ULD unbind manoeuvre you'll end up with a dangling gendisk pointer).

The other problem with taking gendisk out of the ULD structure and
putting it into the scsi_device is that for the sg driver, we have two
of them (one for the attached ULD and one for the sg driver).

The fundamental issue seems to be that the gendisk is the holder of all
the other info (queue, ULD etc) not vice versa ... and this patch is
trying to reverse that relationship.

James



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 0/3] clean gendisk out of scsi ULD structs
  2007-07-06 20:02 ` James Bottomley
@ 2007-07-07  3:25   ` Douglas Gilbert
  2007-07-07 15:15     ` James Bottomley
  0 siblings, 1 reply; 8+ messages in thread
From: Douglas Gilbert @ 2007-07-07  3:25 UTC (permalink / raw)
  To: James Bottomley
  Cc: Kristen Carlson Accardi, akpm, jeff, linux-scsi, linux-kernel

James Bottomley wrote:
> On Thu, 2007-07-05 at 14:06 -0700, Kristen Carlson Accardi wrote:
>> Since gendisk will now become part of struct scsi_device, we don't need
>> to store this value in any private data structs where they already store
>> scsi_device.  This series cleans up a few drivers which did this.
> 
> Actually, as Al pointed out, we do have lifetime rules issues with doing
> this.  The problem is that gendisk itself always has a shorter lifetime
> than scsi_device (not much shorter, usually, but if you execute a legal
> ULD unbind manoeuvre you'll end up with a dangling gendisk pointer).

What about having short-lived scsi_device objects? For example:
one that lives long enough for a pass-through to send a
SCSI command (and receive its response) to one of a target's
well known logical units.

> The other problem with taking gendisk out of the ULD structure and
> putting it into the scsi_device is that for the sg driver, we have two
> of them (one for the attached ULD and one for the sg driver).

Add the bsg driver and that would make three of them. Or; if
the lu's peripheral device type was not of interest to sd, st,
sr, and osst; back to two gendisk objects (i.e. one each
for sg and bsg).

> The fundamental issue seems to be that the gendisk is the holder of all
> the other info (queue, ULD etc) not vice versa ... and this patch is
> trying to reverse that relationship.

A minor issue is the name gendisk ... unless, of course,
you go and look at its definition in linux/genhd.h in
which case the name looks somewhat appropriate. It looks
like a mess [queue, ULD name, major/minor(s), partitions,
capacity, disk_stats, kobjects, etc]. That is a considerable
amount of superfluous information for "just a tag for
requests coming into (a) given queue" when that queue leads
to a non-block device.

Doug Gilbert

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch 0/3] clean gendisk out of scsi ULD structs
  2007-07-07  3:25   ` Douglas Gilbert
@ 2007-07-07 15:15     ` James Bottomley
  0 siblings, 0 replies; 8+ messages in thread
From: James Bottomley @ 2007-07-07 15:15 UTC (permalink / raw)
  To: dougg; +Cc: Kristen Carlson Accardi, akpm, jeff, linux-scsi, linux-kernel

On Fri, 2007-07-06 at 23:25 -0400, Douglas Gilbert wrote:
> James Bottomley wrote:
> > On Thu, 2007-07-05 at 14:06 -0700, Kristen Carlson Accardi wrote:
> >> Since gendisk will now become part of struct scsi_device, we don't need
> >> to store this value in any private data structs where they already store
> >> scsi_device.  This series cleans up a few drivers which did this.
> > 
> > Actually, as Al pointed out, we do have lifetime rules issues with doing
> > this.  The problem is that gendisk itself always has a shorter lifetime
> > than scsi_device (not much shorter, usually, but if you execute a legal
> > ULD unbind manoeuvre you'll end up with a dangling gendisk pointer).
> 
> What about having short-lived scsi_device objects? For example:
> one that lives long enough for a pass-through to send a
> SCSI command (and receive its response) to one of a target's
> well known logical units.

This is sort of what we already do for REPORT_LUNS (except that we use
lun 0 instead of the REPORT LUN well known lun).  What additions do you
want to see?

> > The other problem with taking gendisk out of the ULD structure and
> > putting it into the scsi_device is that for the sg driver, we have two
> > of them (one for the attached ULD and one for the sg driver).
> 
> Add the bsg driver and that would make three of them. Or; if
> the lu's peripheral device type was not of interest to sd, st,
> sr, and osst; back to two gendisk objects (i.e. one each
> for sg and bsg).

gendisk is actually used to facilitate the SCSI ULD infrastructure; bsg,
being block, doesn't actually use it, so we'd still only have two.

> > The fundamental issue seems to be that the gendisk is the holder of all
> > the other info (queue, ULD etc) not vice versa ... and this patch is
> > trying to reverse that relationship.
> 
> A minor issue is the name gendisk ... unless, of course,
> you go and look at its definition in linux/genhd.h in
> which case the name looks somewhat appropriate. It looks
> like a mess [queue, ULD name, major/minor(s), partitions,
> capacity, disk_stats, kobjects, etc]. That is a considerable
> amount of superfluous information for "just a tag for
> requests coming into (a) given queue" when that queue leads
> to a non-block device.

The benefits outweigh the costs ... in the same way that we have a block
queue above all the character devices so we can treat SCSI queueing in a
uniform fashion regardless of device.

James



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-07-07 15:15 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-05 21:06 [patch 0/3] clean gendisk out of scsi ULD structs Kristen Carlson Accardi
2007-07-05 22:09 ` Douglas Gilbert
2007-07-05 23:03   ` Al Viro
2007-07-05 23:02 ` Al Viro
2007-07-05 23:14   ` James Bottomley
2007-07-06 20:02 ` James Bottomley
2007-07-07  3:25   ` Douglas Gilbert
2007-07-07 15:15     ` James Bottomley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox