Hello, I'm trying to understand the read operation in VFS, and get confused by the asynchronous and synchronous operations. At the beginning, do_sync_read() invokes aio_read, which is generic_file_aio_read for ext4. generic_file_aio_read should be asynchronous read. But what really confuses me is do_generic_file_read, which is called by generic_file_aio_read. It seems to me do_generic_file_read implements synchronous read as this is the only function I can find that copy data to the user space by invoking the actor callback function. If do_generic_file_read is synchronous, how can generic_file_aio_read be asynchronous? In do_generic_file_read, if the data to be read isn't in the cache, normally page_cache_sync_readahead should be called. As far as I understand, when page_cache_sync_readahead returns, the pages will be ready in the cache, but the corresponding data in the disk isn't necessarily copied to the pages yet (because it eventually only invokes submit_bio to submit the IO requests to the block layer), so PageUptodate of the requested page might still return false, and then do_generic_file_read tries to invoke readpage to read the page again instead of waiting. Since the disk is always very slow, doesn't it just waste CPU time? Or do I miss something? Best, Da _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies