Re: [Suspected SPAM] Re: [PATCH] fc-transport: BSG clean-up changes for normal and timeout completions (scsi-post-merge tree)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 18 Jun 2009 12:05:24 -0700
Giridhar Malavali <giridhar.malavali@xxxxxxxxxx> wrote:

> >>  /**
> >>   * fc_bsg_job_timeout - handler for when a bsg request timesout
> >>   * @req:	request that timed out
> >> @@ -3471,19 +3479,10 @@ fc_bsg_job_timeout(struct request *req)
> >>  				"abort failed with status %d\n", err);
> >>  	}
> >>
> >> -	if (!done) {
> >> -		spin_lock_irqsave(&job->job_lock, flags);
> >> -		job->ref_cnt--;
> >> -		spin_unlock_irqrestore(&job->job_lock, flags);
> >> -		fc_destroy_bsgjob(job);
> >> -	}
> >> -
> >>  	/* the blk_end_sync_io() doesn't check the error */
> >>  	return BLK_EH_HANDLED;
> >
> > I think that you need to return a proper value here; see my previous
> > patch. If a job is done, we need to return BLK_EH_NOT_HANDLED here;
> > otherwise the block layer calls __blk_complete_request for the job
> > (and later we call blk_complete_request for the same job).
> >
> > The rest looks fine by me.
> 
> static void blk_rq_timed_out(struct request *req)
> {
>          struct request_queue *q = req->q;
>          enum blk_eh_timer_return ret;
> 
>          ret = q->rq_timed_out_fn(req);
>          switch (ret) {
>          case BLK_EH_HANDLED:
>                  __blk_complete_request(req);
>                  break;
>          case BLK_EH_RESET_TIMER:
>                  blk_clear_rq_complete(req);
>                  blk_add_timer(req);
>                  break;
>          case BLK_EH_NOT_HANDLED:
>                  /*
>                   * LLD handles this for now but in the future
>                   * we can send a request msg to abort the command
>                   * and we can move more of the generic scsi eh code to
>                   * the blk layer.
>                   */
>                  break;
> 
> 	As per this code, the completion routine will be called only if we  
> return BLK_EH_HANDLED from fc transport.

Correct.


> In our case the abort of the  
> timed out request
> has been completed and handled. That's the reason I returned  
> BLK_EH_HANDLED always.

Hmm, if the 'done' is not zero in fc_bsg_job_timeout, the request
should not be aborted or completed?

I mean that if (job->state_flags & FC_RQST_STATE_DONE) is true, the
low level driver handler (such as zfcp_fc_generic_els_handler) is
performing the request. So fc_bsg_job_timeout() can't abort or
complete that request. fc_bsg_job_timeout() needs to ignore the
request.


> 	In case of returning BLK_EH_NOT_HANDLED when does the bsg job  
> completion happens? I did see that by returning BLK_EH_NOT_HANDLED the  
> application never got response back.

The low level driver handler will call job->job_done later.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux