[dm-devel] clone_endio question (kernel 2.5/2.6)

Christophe Saout christophe at saout.de
Fri Jul 25 18:40:02 UTC 2003


     1. Am Fr, 2003-07-25 um 16.55 schrieb Kevin Corry:
> On Thursday 24 July 2003 18:49, Christophe Saout wrote:
> > Am Fr, 2003-07-25 um 01.40 schrieb Christophe Saout:
> > > Is it possible that someone calls bio_endio with done < bi_size and an
> > > error set? If it is so, the error is ignored by clone_endio.
> > >
> > > "if (bio->bi_size) return 1;" gets executed before the error parameter
> > > gets checked.
> > >
> > > When clone_endio is executed, say, two times and the first time it get's
> > > called with an error and the second time without, device-mapper calls
> > > bio_endio on the original bio without noticing the error.
> >
> > I just checked: The raid1 code checks the BIO_UPTODATE flag in the bio
> > and returns an error if it got cleared. It can get cleared by bio_endio
> > when an error is passed.
> 
> The "if (bio->bi_size) return 1;" is the accepted convention for drivers that 
> don't care about partial bio completions (MD and DM certainly don't care). 
> IIRC, the original assumption is that if a driver sets an error when it 
> completes one part of a bio, it will set an error on completions of the 
> remaining parts.

Ah, ok, that's what I wanted to know. I assumed it but was not sure.
So I'll follow that assumption.

Thanks for your response.

--
Christophe Saout <christophe at saout.de>
Please avoid sending me Word or PowerPoint attachments.
See http://www.fsf.org/philosophy/no-word-attachments.html





More information about the dm-devel mailing list