Re: Question on sys_readahead()

Andrew Morton
2001-12-21T23:26:55Z

Michael Marxmeier wrote:
>
> I have a question on sys_readahead and would appreciate
> some hint or a pointer.
>
> - When was this call added?

Very late one night, we think :) It was added in linux-2.4.13-pre4.

> - As far as i understand the code it reads the data into
> the page cache. The data is ready sync and there is no
> way to do this async and have a notification unless using
> a separate thread.

It is async. The call will submit the IO and will return immediately.
It could block on things like memory shortage, request queue exhaustion,
but this is unlikely, and pretty much any syscall could block under these
conditions.

You should be able to poll the status of the readhead pages by mmapping
the relevant section of the file and then using mincore() to find out if
the IO has completed.

> A typical use i could see is preloading some data in the
> page cache from a separate thread (eg. for a media player).

Or from the same thread.

> BTW: AFAICS the code is off by one if offset/count is not in
> PAGE_SIZE chunks?
>
> unsigned long start = offset >> PAGE_CACHE_SHIFT;
> unsigned long len = (count + ((long)offset & ~PAGE_CACHE_MASK)) >> PAGE_CACHE_SHIFT;

Looks like it. If offset is zero and count is 4097, it will only read
one page.

-