linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: bugme-daemon@bugzilla.kernel.org
To: linux-scsi@vger.kernel.org
Subject: [Bug 11898] mke2fs hang on AIC79 device.
Date: Tue, 11 Nov 2008 11:43:20 -0800 (PST)	[thread overview]
Message-ID: <20081111194320.656FB108058@picon.linux-foundation.org> (raw)
In-Reply-To: <bug-11898-11613@http.bugzilla.kernel.org/>

http://bugzilla.kernel.org/show_bug.cgi?id=11898





------- Comment #36 from anonymous@kernel-bugs.osdl.org  2008-11-11 11:43 -------
Reply-To: michaelc@cs.wisc.edu

Mike Christie wrote:
> I can sort of replicate this now. Let me do some testing on the changes 
> and I will submit something in a minute.

I do not think I am replicating the original problem. The attached patch 
should fix the oops in James's splice use patch though.
Close possible infinite loop when devices are added back to the
starved list.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>


diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index f5d3b96..fa45a1a 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -567,15 +567,18 @@ static inline int scsi_host_is_busy(struct Scsi_Host
*shost)
  */
 static void scsi_run_queue(struct request_queue *q)
 {
-       struct scsi_device *starved_head = NULL, *sdev = q->queuedata;
+       struct scsi_device *sdev = q->queuedata;
        struct Scsi_Host *shost = sdev->host;
+       LIST_HEAD(starved_list);
        unsigned long flags;

        if (scsi_target(sdev)->single_lun)
                scsi_single_lun_run(sdev);

        spin_lock_irqsave(shost->host_lock, flags);
-       while (!list_empty(&shost->starved_list) && !scsi_host_is_busy(shost))
{
+       list_splice_init(&shost->starved_list, &starved_list);
+
+       while (!list_empty(&starved_list)) {
                int flagset;

                /*
@@ -588,24 +591,18 @@ static void scsi_run_queue(struct request_queue *q)
                 * scsi_request_fn must get the host_lock before checking
                 * or modifying starved_list or starved_entry.
                 */
-               sdev = list_entry(shost->starved_list.next,
-                                         struct scsi_device, starved_entry);
-               /*
-                * The *queue_ready functions can add a device back onto the
-                * starved list's tail, so we must check for a infinite loop.
-                */
-               if (sdev == starved_head)
+               if (scsi_host_is_busy(shost))
                        break;
-               if (!starved_head)
-                       starved_head = sdev;

+               sdev = list_entry(starved_list.next,
+                                 struct scsi_device, starved_entry);
+               list_del_init(&sdev->starved_entry);
                if (scsi_target_is_busy(scsi_target(sdev))) {
                        list_move_tail(&sdev->starved_entry,
                                       &shost->starved_list);
                        continue;
                }

-               list_del_init(&sdev->starved_entry);
                spin_unlock(shost->host_lock);

                spin_lock(sdev->request_queue->queue_lock);
@@ -621,6 +618,8 @@ static void scsi_run_queue(struct request_queue *q)

                spin_lock(shost->host_lock);
        }
+       /* put any unprocessed entries back */
+       list_splice(&starved_list, &shost->starved_list);
        spin_unlock_irqrestore(shost->host_lock, flags);

        blk_run_queue(q);


-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

  parent reply	other threads:[~2008-11-11 19:44 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-30  8:17 [Bug 11898] New: mke2fs hang on AIC79 device bugme-daemon
2008-10-30  8:53 ` [Bug 11898] " bugme-daemon
2008-10-30  8:54 ` bugme-daemon
2008-10-30 10:23 ` bugme-daemon
2008-10-30 12:37 ` bugme-daemon
2008-10-30 14:06 ` bugme-daemon
2008-10-31  3:12 ` bugme-daemon
2008-11-03  8:02 ` bugme-daemon
2008-11-04  7:37 ` bugme-daemon
2008-11-04  7:41 ` bugme-daemon
2008-11-04  9:05 ` bugme-daemon
2008-11-05  1:32 ` bugme-daemon
2008-11-05  1:55   ` Mike Christie
2008-11-05  2:10     ` James Bottomley
2008-11-05  1:56 ` bugme-daemon
2008-11-05  2:11 ` bugme-daemon
2008-11-05  2:43 ` bugme-daemon
2008-11-05  2:56 ` bugme-daemon
2008-11-05  3:19 ` bugme-daemon
2008-11-05  4:01 ` bugme-daemon
2008-11-05 15:24   ` James Bottomley
2008-11-05 17:25     ` Mike Christie
2008-11-05 18:46       ` James Bottomley
2008-11-09 15:47       ` James Bottomley
2008-11-11 18:22         ` Mike Christie
2008-11-11 19:42           ` Mike Christie
2008-11-05  4:26 ` bugme-daemon
2008-11-05 10:48 ` bugme-daemon
2008-11-05 14:32 ` bugme-daemon
2008-11-05 15:25 ` bugme-daemon
2008-11-05 17:25 ` bugme-daemon
2008-11-05 18:47 ` bugme-daemon
2008-11-06  1:44 ` bugme-daemon
2008-11-06  1:59 ` bugme-daemon
2008-11-06  2:06 ` bugme-daemon
2008-11-06  2:19 ` bugme-daemon
2008-11-06 14:57   ` James Bottomley
2008-11-06 14:58 ` bugme-daemon
2008-11-07  1:04 ` bugme-daemon
2008-11-09 15:47 ` bugme-daemon
2008-11-09 17:54 ` bugme-daemon
2008-11-09 19:01 ` bugme-daemon
2008-11-09 19:15 ` bugme-daemon
2008-11-10  2:15 ` bugme-daemon
2008-11-11 11:23 ` bugme-daemon
2008-11-11 11:28 ` bugme-daemon
2008-11-11 18:23 ` bugme-daemon
2008-11-11 19:43 ` bugme-daemon [this message]
2008-11-12 10:47 ` bugme-daemon
2008-11-14 15:40   ` James Bottomley
2008-11-14 15:41 ` bugme-daemon
2008-11-16 17:17 ` bugme-daemon
2008-11-19  1:49 ` bugme-daemon
2008-12-02  7:20 ` bugme-daemon
2008-12-07 21:52 ` bugme-daemon
2008-12-13 18:23 ` bugme-daemon
  -- strict thread matches above, loose matches on Subject: below --
2008-12-07 20:27 2.6.28-rc8-git5: Reported regressions from 2.6.27 Rafael J. Wysocki
2008-12-07 20:32 ` [Bug #11898] mke2fs hang on AIC79 device Rafael J. Wysocki

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=20081111194320.656FB108058@picon.linux-foundation.org \
    --to=bugme-daemon@bugzilla.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).