From: Jens Axboe <axboe@suse.de>
To: Oleg Drokin <green@namesys.com>
Cc: Ingo Molnar <mingo@elte.hu>, Robert Love <rml@tech9.net>,
Thomas Molina <tmolina@cox.net>,
linux-kernel@vger.kernel.org, andre@linux-ide.org
Subject: Re: 2.5 Problem Status Report
Date: Wed, 11 Sep 2002 12:29:26 +0200 [thread overview]
Message-ID: <20020911102926.GB1364@suse.de> (raw)
In-Reply-To: <20020911102507.GA1364@suse.de>
On Wed, Sep 11 2002, Jens Axboe wrote:
> On Wed, Sep 11 2002, Oleg Drokin wrote:
> > Hello!
> >
> > On Wed, Sep 11, 2002 at 09:38:25AM +0200, Ingo Molnar wrote:
> >
> > > > I have preemption disabled.
> > > nevertheless please print out preempt_count() in sched.c - since the big
> > > IRQ cleanups we use the preemption count even if preemption is disabled.
> > > this way we'll know what kind of problem happened - a stuck softirq count,
> > > a stuck hardirq count or an underflow?
> >
> > You was exactly right. preemption count is -1. I inserted chack in
> > dec_preempt_count() and here is updated correct stacktrace. Seems
> > like ide_unmap_buffer is called with some bogus data or something like
> > that. Also I guess the bug is only visible with debug highmem = ON and
> > highmem enabled.
>
> ok I see the bug. it's due to the imbalanced nature of ide_map_buffer()
> vs ide_unmap_buffer(). i'll cook up a fix right away.
Oleg,
Does this make it work?
--- drivers/ide/ide-disk.c~ 2002-09-11 12:27:47.000000000 +0200
+++ drivers/ide/ide-disk.c 2002-09-11 12:28:17.000000000 +0200
@@ -175,7 +175,7 @@
drive->name, rq->sector, rq->sector+nsect-1,
(unsigned long) rq->buffer+(nsect<<9), rq->nr_sectors-nsect);
#endif
- ide_unmap_buffer(to, &flags);
+ ide_unmap_buffer(rq, to, &flags);
rq->sector += nsect;
rq->errors = 0;
i = (rq->nr_sectors -= nsect);
@@ -226,7 +226,7 @@
unsigned long flags;
char *to = ide_map_buffer(rq, &flags);
taskfile_output_data(drive, to, SECTOR_WORDS);
- ide_unmap_buffer(to, &flags);
+ ide_unmap_buffer(rq, to, &flags);
if (HWGROUP(drive)->handler != NULL)
BUG();
ide_set_handler(drive, &write_intr, WAIT_CMD, NULL);
@@ -302,7 +302,7 @@
* re-entering us on the last transfer.
*/
taskfile_output_data(drive, buffer, nsect<<7);
- ide_unmap_buffer(buffer, &flags);
+ ide_unmap_buffer(rq, buffer, &flags);
} while (mcount);
return 0;
@@ -688,7 +688,7 @@
BUG();
ide_set_handler(drive, &write_intr, WAIT_CMD, NULL);
taskfile_output_data(drive, buffer, SECTOR_WORDS);
- ide_unmap_buffer(buffer, &flags);
+ ide_unmap_buffer(rq, buffer, &flags);
}
return ide_started;
}
--- drivers/ide/ide-taskfile.c~ 2002-09-11 12:27:51.000000000 +0200
+++ drivers/ide/ide-taskfile.c 2002-09-11 12:28:25.000000000 +0200
@@ -60,7 +60,7 @@
#endif
#define task_map_rq(rq, flags) ide_map_buffer((rq), (flags))
-#define task_unmap_rq(rq, buf, flags) ide_unmap_buffer((buf), (flags))
+#define task_unmap_rq(rq, buf, flags) ide_unmap_buffer((rq), (buf), (flags))
inline u32 task_read_24 (ide_drive_t *drive)
{
--- include/linux/ide.h~ 2002-09-11 12:27:14.000000000 +0200
+++ include/linux/ide.h 2002-09-11 12:27:29.000000000 +0200
@@ -597,9 +597,10 @@
return rq->buffer + task_rq_offset(rq);
}
-extern inline void ide_unmap_buffer(char *buffer, unsigned long *flags)
+extern inline void ide_unmap_buffer(struct request *rq, char *buffer, unsigned long *flags)
{
- bio_kunmap_irq(buffer, flags);
+ if (rq->bio)
+ bio_kunmap_irq(buffer, flags);
}
/*
--
Jens Axboe
next prev parent reply other threads:[~2002-09-11 10:24 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-09-11 2:00 2.5 Problem Status Report Thomas Molina
2002-09-11 2:29 ` William Lee Irwin III
2002-09-11 18:33 ` Thomas Molina
2002-09-11 20:23 ` William Lee Irwin III
2002-09-11 4:00 ` Robert Love
2002-09-11 7:07 ` Oleg Drokin
2002-09-11 7:26 ` Ingo Molnar
2002-09-11 7:28 ` Oleg Drokin
2002-09-11 7:38 ` Ingo Molnar
2002-09-11 8:05 ` Oleg Drokin
2002-09-11 10:25 ` Jens Axboe
2002-09-11 10:29 ` Jens Axboe [this message]
2002-09-11 10:47 ` Oleg Drokin
2002-09-11 10:58 ` Jens Axboe
2002-09-11 11:07 ` Jens Axboe
2002-09-11 11:16 ` Oleg Drokin
2002-09-11 11:17 ` Jens Axboe
2002-09-11 11:49 ` Jens Axboe
2002-09-11 12:10 ` Oleg Drokin
2002-09-11 15:38 ` Oleg Drokin
2002-09-11 15:46 ` Ingo Molnar
2002-09-11 15:52 ` Ingo Molnar
2002-09-11 17:49 ` Oleg Drokin
2002-09-11 8:07 ` Thomas Molina
2002-09-11 8:12 ` Oleg Drokin
2002-09-11 9:18 ` Adrian Bunk
2002-09-11 7:12 ` Ingo Molnar
2002-09-11 8:04 ` Axel Siebenwirth
2002-09-11 9:21 ` Clemens Schwaighofer
-- strict thread matches above, loose matches on Subject: below --
2002-08-25 11:21 Thomas Molina
2002-08-26 16:42 ` Greg KH
2002-08-26 21:32 ` Thomas Molina
2002-08-02 2:39 2.5 Problem Status report Thomas Molina
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=20020911102926.GB1364@suse.de \
--to=axboe@suse.de \
--cc=andre@linux-ide.org \
--cc=green@namesys.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rml@tech9.net \
--cc=tmolina@cox.net \
/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.