findBlock(BufferTag pageID) returns (Vfd, off_t)
{
offset = pageID.blockNum * BLOCKSIZE
fileName = relpath(pageID.rnode)
if (pageID.forkNum > 0)
fileName = fileName+"."+pageID.forkNum
fid = PathNameOpenFIle(fileName, O_READ);
fSize = VfdCache[fid].fileSize;
if (offset > fSize) {
fid = allocate new Vfd for next fork
offset = offset - fd.fileSize
}
return (fd, offset)
}
|