Re: [PATCH] 2.6.10 - direct-io async short read bug

From: Sébastien Dugué
Date: Tue Mar 08 2005 - 04:49:51 EST


Le mardi 08 mars 2005 à 01:18 -0800, Andrew Morton a écrit :
> Suparna Bhattacharya <suparna@xxxxxxxxxx> wrote:
> >
> > ...
> >
> > Bugs in this area seem never-ending don't they - plug one, open up
> > another - hard to be confident/verify :( - someday we'll have to
> > rewrite a part of this code.
>
> It's solving a complex problem. Any rewrite would probably end up
just as
> hairy once all the new bugs and corner cases are fixed. Maybe.
>
>
> > Hmm, shouldn't dio->result ideally have been adjusted to be within
> > i_size at the time of io submission, so we don't have to deal with
> > this during completion ? We are creating bios with the right size
> > after all.
> >
> > We have this:
> > if (!buffer_mapped(map_bh)) {
> > ....
> > if (dio->block_in_file >=
> >
i_size_read(dio->inode)>>blkbits) {
> > /* We hit eof */
> > page_cache_release(page);
> > goto out;
> > }
> >
> > and
> > dio->result += iov[seg].iov_len -
> > ((dio->final_block_in_request -
dio->block_in_file) <<
> > blkbits);
> >
> >
> > can you spot what is going wrong here that we have to try and
> > workaround this later ?
>
> Good question. Do we have the i_sem coverage to prevent a concurrent
> truncate?
>
> But from Sebastien's description it doesn't soound as if a concurrent
> truncate is involved.

Yes, you're right, there's no concurrent truncate here. My test case
as well as Daniel's is single threaded and is the only thread accessing
the file.

Regards,

Sébastien.

--
------------------------------------------------------

Sébastien Dugué BULL/FREC:B1-247
phone: (+33) 476 29 77 70 Bullcom: 229-7770

mailto:sebastien.dugue@xxxxxxxx

Linux POSIX AIO: http://www.bullopensource.org/posix

------------------------------------------------------

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