Re: A new ide warning message

Jens Axboe
2002-08-02T16:08:25Z

On Fri, Aug 02 2002, Bartlomiej Zolnierkiewicz wrote:
>
> On Fri, 2 Aug 2002, Jens Axboe wrote:
>
> > On Fri, Aug 02 2002, Bartlomiej Zolnierkiewicz wrote:
> > >
> > > On Fri, 2 Aug 2002, Jens Axboe wrote:
> > >
> > > > On Fri, Aug 02 2002, Jens Axboe wrote:
> > > > > On Fri, Aug 02 2002, Marcin Dalecki wrote:
> > > > > > U?ytkownik Stephen Lord napisa?:
> > > > > > >In 2.5.30 I started getting these warning messages out ide during
> > > > > > >the mount of an XFS filesystem:
> > > > > > >
> > > > > > >ide-dma: received 1 phys segments, build 2
> > > > > > >
> > > > > > >Can anyone translate that into English please.
> > > > > >
> > > > > > It can be found in pcidma.c.
> > > > > > It is repoting that we have one physical segment needed by
> > > > > > the request in question but the sctter gather list allocation
> > > > > > needed to break it up for mapping in two.
> > > > >
> > > > > You don't seem to realise that this is a BUG (somewhere, could even be
> > > > > in the generic mapping functions)! blk_rq_map_sg() must never map a
> > > > > request to more entries that rq->nr_segments, that's just very wrong.
> > > > >
> > > > > That's why I'm suspecting the recent pcidma changes. Just a feeling, I
> > > > > have not looked at them.
> > > >
> > > > I'll take that back. Having looked at Adam's changes there are perfectly
> > > > fine. I'm now putting my money on IDE breakage somewhere instead. It
> > >
> > > Look again Jens. Adam's changes made IDE queue handling inconsistent.
> > > hint: 2 * 127 != 255
> > >
> > > But noticed warning deals with design of ll_rw_blk.c. ;-)
> > > (right now max_segment_size have to be max bv->bv_len aligned)
> >
> > Yeah that's true, actually was just saying that on linux-scsi
> > yesterday/today.
>
> :-)
>
> > > Jens, please look at segment checking/counting code, it does it on
> > > bv->bv_len (4kb most likely) not sector granuality...
> > >
> > > So for not 4kb aligned max_segment_size we will get new segment...
> > >
> > > Best fix will be to make block layer count sectors not bv->bv_len...
> >
> > Well I'm inclined to just make that page size granularity. It's like
> > that in 2.4 as well (no guarentees that we will honor anything less than
> > that granularity).
>
> Anyway it must be also something diffirent - __make_request() should have
> noticed that rq has 2 segments not 1... this puzzles me a bit.

Well yes, that's the whole bug this thread is about, and the puzzling
bit as you say :-)

I haven't even had time to look at Stephen's dump yet, one thing that
did stand out immediately was that phys_segments was 1 even for the big
16 segment requests, which should not be with < 64k max segment size. It
should indeed have been one. So it looks like a one-off or something in
the generic dma mappers.

Steve, make BIO_MAX_SECTORS 4k smaller for now and it should work. I
think.

> This case also shows limits of BIO_MAX_SECTORS again (Adam worked on
> generic solution, but I don't know current state). There some devices
> which set q->max_sectors to 64, i.e. broken ide-floppy driver ;-)

I have code ready for this, I'll share starting next week. Need to
finish lots of other stuff too :/

--
Jens Axboe