[PATCH scsi-misc-2.6 00/07] scsi: timer updates

From: Tejun Heo (htejun_at_gmail.com)
Date: 04/10/05

  • Next message: Tejun Heo: "Re: [PATCH scsi-misc-2.6 01/07] scsi: make aic7xxx use its own timer instead of scmd->eh_timeout"
    To: James.Bottomley@steeleye.com, axboe@suse.de, Christoph Hellwig <hch@infradead.org>
    Date:	Mon, 11 Apr 2005 03:45:06 +0900 (KST)
    
    

     Hello, James, Jens and Christoph.

     This patchset removes misuses of scmd->eh_timeout and unexports SCSI
    timer interface such that no one can misuse it anymore. #02 assumes
    that the preceding scsi_send_eh_cmnd() patch is applied. Tested and
    worked for me.

     The following bugs are fixed.

     * Race condition between eh and normal completion path for eh_timer
     * scsi_delete_timer() race in scsi_queue_insert()

    [ Start of patch descriptions ]

    01_scsi_timer_update_aic7xxx.patch
            : make aic7xxx use its own timer instead of scmd->eh_timeout

            aic7xxx used scmd->eh_timeout in its dv routines. This kind
            of usage requires knowledge of and creates dependency into the
            SCSI midlayer unnecessarily. This patch makes aic7xxx driver
            use its own timer instead of scmd->eh_timeout.
            Suggested by Christoph Hellwig.

    02_scsi_timer_eh_timer_fix.patch
            : make scsi_send_eh_cmnd use its own timer instead of scmd->eh_timeout

            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.

    03_scsi_timer_dispatch_race_fix.patch
            : remove a timer race in scsi_queue_insert()

            scsi_queue_insert() has four callers. Three callers call with
            timer disabled and one (the second invocation in
            scsi_dispatch_cmd()) calls with timer activated.
            scsi_queue_insert() used to always call scsi_delete_timer()
            and ignore the return value. This results in race with timer
            expiration. Remove scsi_delete_timer() call from
            scsi_queue_insert() and make the caller delete timer and check
            the return value.

    04_scsi_timer_remove_delete_timer_from_reset_provider.patch
            : remove unnecessary scsi_delete_timer() call in scsi_reset_provider()

            scsi_reset_provider() calls scsi_delete_timer() on exit which
            isn't necessary. Remove it.

    05_scsi_timer_unexport_timer_functions.patch
            : unexport scsi_{add|delete}_timer()

            SCSI cmd timer has specific synchronization/semantic
            requirements and shouldn't be directly used outside SCSI
            midlayer. With aic7xxx driver updated, there's no user left.
            This patch unexports scsi_{add|delete}_timer() routines and
            also removes @complete argument from scsi_add_timer(). The
            change makes the use of scsi_times_out() confined in
            scsi_error.c, so move it upward such that no prototype is
            needed and make it static.

    06_scsi_timer_update_api_doc.patch
            : Delete scsi_{add|delete}_timer() from scsi_mid_low_api.txt

            As scsi_{add|delete}_timer() got unexported, remove them from
            the API doc.

    07_scsi_timer_strict_reuse.patch
            : make reuse of SCSI cmd timer strict

            SCSI cmd timer shouldn't be reused while it's active. Make
            sure that the unused condition is marked with
            eh_timeout->function = NULL and BUG() active reuse path.

    [ End of patch descriptions ]

     Thanks a lot.

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/


  • Next message: Tejun Heo: "Re: [PATCH scsi-misc-2.6 01/07] scsi: make aic7xxx use its own timer instead of scmd->eh_timeout"

    Relevant Pages

    • Re: [parisc-linux] Re: [PATCH 3/9] mm: parisc pte atomicity
      ... using your own tmpalias area sounds much better than getting ... I've simply not wrapped my head around the races, ... it looks like we agree that my patch is necessary and valid as is; ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: keyboard - was: Re: Linux 2.6.0-test4
      ... >> I was able to get the key unstuck by switching back and forth between ... I rebuild my kernel including your patch; ... I'll get back to you once I verify that the problem doesn't occur ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: 2.6.0-test8/test9 io scheduler needs tuning?
      ... interactivity with regard to desktop use. ... Going to improve the time info output of the ddd loops to get better data and ... with the patch the hang reported earlier was not encountered again so ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: [CFT][PATCH] 2.6.4-rc1 remove x86 boot page tables
      ... > For VISWS I think you actually need to turn paging off explicitly. ... The patch will need a few tweaks but it should be fairly straight forward. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: [PATCH] clarify message and give support contact for non-GPL modules
      ... The author of the second module ... So here is another attempt at the patch. ... send the line "unsubscribe linux-kernel" in ... More majordomo info at http://vger.kernel.org/majordomo-info.html ...
      (Linux-Kernel)