Christoph Hellwig <hch@xxxxxx> wrote: > If we can't get that easily it can be emulated using lseek SEEK_DATA / > SEEK_HOLE assuming no other thread could be writing to the file, or the > raciness doesn't matter. Another thread could be writing to the file, and the raciness matters if I want to cache the result of calling SEEK_HOLE - though it might be possible just to mask it off. One problem I have with SEEK_HOLE is that there's no upper bound on it. Say I have a 1GiB cachefile that's completely populated and I want to find out if the first byte is present or not. I call: end = vfs_llseek(file, SEEK_HOLE, 0); It will have to scan the metadata of the entire 1GiB file and will then presumably return the EOF position. Now this might only be a mild irritation as I can cache this information for later use, but it does put potentially put a performance hiccough in the case of someone only reading the first page or so of the file (say the file program). On the other hand, probably most of the files in the cache are likely to be complete - in which case, it's probably quite cheap. However, SEEK_HOLE doesn't help with the issue of the filesystem 'altering' the content of the file by adding or removing blocks of zeros. David