From: Tejun Heo <htejun@gmail.com>
To: James Bottomley <James.Bottomley@SteelEye.com>
Cc: SCSI Mailing List <linux-scsi@vger.kernel.org>,
Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH scsi-misc-2.6 01/04] scsi: make scsi_send_eh_cmnd use its own timer instead of scmd->eh_timeout
Date: Mon, 25 Apr 2005 08:46:11 +0900 [thread overview]
Message-ID: <426C2FC3.4090105@gmail.com> (raw)
In-Reply-To: <1114381342.4786.17.camel@mulgrave>
Hi, James.
James Bottomley wrote:
> On Tue, 2005-04-19 at 23:31 +0900, Tejun Heo wrote:
>
>> scmd->eh_timeout is used to resolve the race between command
>> completion and timeout. However, during error handling,
>> scsi_send_eh_cmnd uses scmd->eh_timeout. This creates a race
>> condition between eh and normal completion for a request which
>> has timed out and in the process of error handling. If the
>> request completes while scmd->eh_timeout is being used by eh,
>> eh timeout is lost and the command will be handled by both eh
>> and completion path. This patch fixes the race by making
>> scsi_send_eh_cmnd() use its own timer.
>>
>> This patch adds shost->eh_timeout field. The name of the
>> field equals scmd->eh_timeout which is used for normal command
>> timeout. As this can be confusing, renaming scmd->eh_timeout
>> to something like scmd->cmd_timeout would be good.
>>
>> Reworked such that timeout race window is kept at minimal
>> level as pointed out by James Bottomley.
>
>
> This looks fine in principle. However, three comments
>
> 1. If you're doing this, there's no further use for eh_timeout, so
> remove it (and preferably fix gdth_proc.c; however, it's better to break
> the compile of that driver than have it rely on a now defunct field).
If you're talking about scmd->eh_timeout, it's our main timer for
normal command timeouts. If you're suggesting renaming it to something
more apparant, I agree. Maybe just scmd->timeout will do.
> 2. Use of eh_action is private to scsi_error.c, so you don't need to add
> a new field to the host, just make eh_action a pointer to a private
> eh_action structure which contains the timer and the semaphore.
Sure.
> 3. To close a really tiny window where the running timer could race with
> the del_timer, it should probably be del_timer_sync(). The practical
> effect of this is nil, but it would be correct programming.
Sorry, but, AFAICT, that wouldn't close any window. We use timer
pending for tie-breaker. When scsi_eh_done() wins, timer never gets to
run, and if scsi_eh_times_out() wins, the eh thread is woken up only
after the last reference to the timer/eh is finished (up operation). If
I'm missing something, please point out.
BTW, are you still keeping the bk tree up-to-date? And, if so, until
when are you gonna keep the bk tree? I'm painfully trying to follow and
convert all my trees to git, but I _really_ miss changeset browsing of
bk. Call me lazy but it was just too nice browsing the changesets only
with mouse. One way or the other, it's a shame.
Thanks.
--
tejun
next prev parent reply other threads:[~2005-04-24 23:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-19 14:31 [PATCH scsi-misc-2.6 00/04] scsi: misc timer fixes (reworked) Tejun Heo
2005-04-19 14:31 ` [PATCH scsi-misc-2.6 01/04] scsi: make scsi_send_eh_cmnd use its own timer instead of scmd->eh_timeout Tejun Heo
2005-04-24 22:22 ` James Bottomley
2005-04-24 23:46 ` Tejun Heo [this message]
2005-04-25 18:09 ` James Bottomley
2005-04-27 2:22 ` Tejun Heo
2005-04-27 5:34 ` James Bottomley
2005-04-27 11:50 ` Tejun Heo
2005-04-19 14:31 ` [PATCH scsi-misc-2.6 02/04] scsi: remove spurious if tests from scsi_eh_{times_out|done} Tejun Heo
2005-04-19 14:31 ` [PATCH scsi-misc-2.6 03/04] scsi: remove a timer race in scsi_queue_insert() Tejun Heo
2005-04-19 14:31 ` [PATCH scsi-misc-2.6 04/04] scsi: remove unnecessary scsi_delete_timer() call in scsi_reset_provider() Tejun Heo
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=426C2FC3.4090105@gmail.com \
--to=htejun@gmail.com \
--cc=James.Bottomley@SteelEye.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/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.