17.9 breada (4773)

This procedure has an additional parameter, as compared with “bread”. It is called only by “readi” (6256).

4780:

Check if the desired block has already been assigned to a buffer. (It may not yet be available, but at least is it there?);

4781:

If not initiate the necessary read operation but don’t wait for it to finish;

4788:

Look around for the “read ahead” block. If it is not there, allocate a buffer (4789) but release it (4791) if the buffer is already ready;

4793:

The “read ahead” block is not ready, so initiate an asynchronous read operation;

4798:

If a buffer was assigned to the current block call “bread” to wrap it up, else...

4800:

Wait for the completion of the operation which was started at line 4785.