All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Anderson <andmike@linux.vnet.ibm.com>
To: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Mike Christie <michaelc@cs.wisc.edu>,
	Chandra Seetharaman <sekharan@us.ibm.com>,
	dm-devel@redhat.com, linux-scsi@vger.kernel.org,
	jens.axboe@oracle.com
Subject: Re: [PATCH 3/9] scsi_dh: scsi handling of REQ_LB_OP_TRANSITION
Date: Wed, 6 Feb 2008 11:00:39 -0800	[thread overview]
Message-ID: <20080206190039.GD32522@linux.vnet.ibm.com> (raw)
In-Reply-To: <1202151767.3096.86.camel@localhost.localdomain>

James Bottomley <James.Bottomley@HansenPartnership.com> wrote:
> 
> On Fri, 2008-02-01 at 14:00 -0600, Mike Christie wrote:
> > Chandra Seetharaman wrote:
> > > @@ -1445,9 +1479,24 @@ static void scsi_kill_request(struct req
> > >  static void scsi_softirq_done(struct request *rq)
> > >  {
> > >  	struct scsi_cmnd *cmd = rq->completion_data;
> > > -	unsigned long wait_for = (cmd->allowed + 1) * cmd->timeout_per_command;
> > >  	int disposition;
> > > +	struct request_queue *q;
> > > +	unsigned long wait_for, flags;
> > >  
> > > +	if (blk_linux_request(rq)) {
> > > +		q = rq->q;
> > > +		spin_lock_irqsave(q->queue_lock, flags);
> > > +		/*
> > > +		 * we always return 1 and the caller should
> > > +		 * check rq->errors for the complete status
> > > +		 */
> > > +		end_that_request_last(rq, 1);
> > > +		spin_unlock_irqrestore(q->queue_lock, flags);
> > > +		return;
> > > +	}
> > > +
> > > +
> > > +	wait_for = (cmd->allowed + 1) * cmd->timeout_per_command;
> > >  	INIT_LIST_HEAD(&cmd->eh_entry);
> > >  
> > .....
> > 
> > > +
> > >  /*
> > >   * Function:    scsi_request_fn()
> > >   *
> > > @@ -1519,7 +1612,23 @@ static void scsi_request_fn(struct reque
> > >  		 * accept it.
> > >  		 */
> > >  		req = elv_next_request(q);
> > > -		if (!req || !scsi_dev_queue_ready(q, sdev))
> > > +		if (!req)
> > > +			break;
> > > +
> > > +		/*
> > > +		 * We do not account for linux blk req in the device
> > > +		 * or host busy accounting because it is not necessarily
> > > +		 * a scsi command that is sent to some object. The lower
> > > +		 * level can translate it into a request/scsi_cmnd, if
> > > +		 * necessary, and then queue that up using REQ_TYPE_BLOCK_PC.
> > > +		 */
> > > +		if (blk_linux_request(req)) {
> > > +			blkdev_dequeue_request(req);
> > > +			scsi_execute_blk_linux_cmd(req);
> > > +			continue;
> > > +		}
> > > +
> > > +		if (!scsi_dev_queue_ready(q, sdev))
> > >  			break;
> > 
> > I think these two pieces are one of the reasons I have not pushed the 
> > patches. I thought the completion and execution pieces here are a little 
> > ugly and seem to just wedge themselves in where they want to be.
> > 
> > Is there any way to make the insertion of non-scsi commands more common? 
> > Do we have the code for being able to send requests directly to 
> > something like a fc rport done? Could we maybe inject these special 
> > commands to the hw handler using something similar to how bsg would send 
> > non scsi commands to weird objects (objects like rport, sessions, and 
> > not devices we traditionally associated with queues like scsi_devices). 
> > Just a thought with no code :) that is why the ugly code existed still :)
> 
> We sort of do.  The bsg code in scsi_transport_sas to send SMP frames to
> expander devices would be an example of non-scsi commands going via a
> mechanism other than being encapsulated in SCSI.  I don't know if that's
> the complete solution in this case, but you could investigate it.

I looked at the bsg code in scsi_transport_sas and all I see it doing is
calling blk_init_queue to set the request_fn. The request_fn
(*smp_request) just processes one cmd_type. Is there code is another tree
that has more processing?

A idea to allow for more control / flexibility cmd_type handlers could be
added inside request_fn, prep_rq_fn, softirq_done_fn.

I thought about this being at a higher level in the block layer, but it
would be hard to handle the request_fn cleanly at the high level. The
localized change would reduce impact on users who do not want or need per
cmd_type handlers.

A SCSI example might be something like:

static void scsi_softirq_done(struct request *rq)
{
	...
	sdev->cmd_type_handler[rq->cmd_type]->softirq_done(rq)
	...
}

int scsi_prep_fn(struct request_queue *q, struct request *req)
{
	...
	sdev->cmd_type_handler[rq->cmd_type]->prep_fn(req)
	...
}

static void scsi_request_fn(struct request_queue *q)
{
	...
	sdev->cmd_type_handler[rq->cmd_type]->request_fn(req)
	...
}

This is just moving the code inside the cmd_type "if" checks, but it may
reduce the number of cmd_type "if" checks in some paths (if we make
multiple decisions based on cmd_type). On init of the sdev default
handlers would be installed.

-andmike
--
Michael Anderson
andmike@linux.vnet.ibm.com

  reply	other threads:[~2008-02-06 19:00 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-24  0:30 [PATCH 0/9] scsi_dh: Move dm device handler to SCSI layer Chandra Seetharaman
2008-01-24  0:30 ` [PATCH 1/9] scsi_dh: add REQ_LB_OP_TRANSITION and errors Chandra Seetharaman
2008-01-24  0:30 ` [PATCH 2/9] scsi_dh: change sd_prep_fn to call common code Chandra Seetharaman
2008-01-24  0:30 ` [PATCH 3/9] scsi_dh: scsi handling of REQ_LB_OP_TRANSITION Chandra Seetharaman
2008-02-01 20:00   ` Mike Christie
2008-02-04 18:59     ` Chandra Seetharaman
2008-02-04 19:02     ` James Bottomley
2008-02-06 19:00       ` Mike Anderson [this message]
2008-02-06 20:52         ` James Bottomley
2008-01-24  0:31 ` [PATCH 4/9] scsi_dh: add skeleton for SCSI Device Handlers Chandra Seetharaman
2008-02-01 19:53   ` Mike Christie
2008-02-01 20:27     ` Mike Anderson
2008-02-04 18:54     ` Chandra Seetharaman
2008-01-24  0:31 ` [PATCH 5/9] scsi_dh: add EMC Clariion device handler Chandra Seetharaman
2008-01-24  0:31 ` [PATCH 6/9] scsi_dh: add hp sw " Chandra Seetharaman
2008-01-24  0:32 ` [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE Chandra Seetharaman
2008-02-04 18:58   ` James Bottomley
2008-02-04 20:15     ` Chandra Seetharaman
2008-02-04 20:28       ` James Bottomley
2008-02-04 21:19         ` Chandra Seetharaman
2008-02-09 12:45           ` Matthew Wilcox
2008-02-11 18:27             ` Chandra Seetharaman
2008-02-11 19:18               ` Matthew Wilcox
2008-02-28  1:03                 ` Chandra Seetharaman
2008-02-05 20:04         ` Mike Christie
2008-02-05 21:56           ` Mike Anderson
2008-02-06  0:46             ` Chandra Seetharaman
2008-02-07 10:08             ` no INQUIRY from userspace please (was Re: [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE) Stefan Richter
2008-02-07 15:01               ` James Bottomley
2008-02-07 17:05                 ` no INQUIRY from userspace please Stefan Richter
2008-02-07 17:13                   ` Stefan Richter
2008-02-19 20:53                     ` Douglas Gilbert
2008-03-04  9:06                       ` Hannes Reinecke
2008-02-07 20:42                 ` no INQUIRY from userspace please (was Re: [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE) Luben Tuikov
2008-02-04 20:26     ` [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE Mike Anderson
2008-01-24  0:32 ` [PATCH 8/9] scsi_dh: add lsi rdac device handler Chandra Seetharaman
2008-01-24  0:32 ` [PATCH 9/9] scsi_dh: add scsi device handler to dm Chandra Seetharaman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080206190039.GD32522@linux.vnet.ibm.com \
    --to=andmike@linux.vnet.ibm.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=dm-devel@redhat.com \
    --cc=jens.axboe@oracle.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=michaelc@cs.wisc.edu \
    --cc=sekharan@us.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.