On 10/30/05, Hui Cheng <hcheng@xxxxxxxxxxx> wrote: > > I went through the floppy code you mentioned, yes, it works as you said. > But the problem is, I don't think that the ide disk works the similar way. > In linux 2.4 kernel, the reading process explicitly sleep at > do_generic_file_read()->wait_on_page(), that is why the coder try > everything to postpone calling wait_on_page. However, I think things > change in 2.6. I have a guess that the synchronous read has been improved > by some asynchronous method. That is, the process (which performs a > synchronous read) just submit a synchronous read request and return, even > though the buffer is not filled with data from disk. It would turn to > sleep only when it performs real operating on the buffer (if the buffer > is still not filled in valid data by then). In this way, the > performance is improved. That is why I did not find any "put to sleeo > code" in the file system and ide driver code. But this is only my guess. > Any suggestion? And thanks Fawad for your kindly reply:) > I don't think your guess is right ! When we do read from user-space application, through system call sys_read is called which goes to the vfs_read and then goes to the file-system read function which calls the submit_bio to submit request to device and get signal in the form of end_io when the device completes request. Now as your guess is the data in buffer isn't present till the operation on the buffer is done is not seems valid to me. Because I saw sleeping variable, timer etc in ide-io.c code especially in ide_do_request function which I think is used for sleeping (I havn't got into the datail of it) as the comments in ide_do_request function says : (see http://lxr.linux.no/source/drivers/ide/ide-io.c#L1074) /* * Take a short snooze, and then wake up this hwgroup again. * This gives other hwgroups on the same a chance to * play fairly with us, just in case there are big differences * in relative throughputs.. don't want to hog the cpu too much. */ And after fullfiling the request ide driver also calls ide_end_request which at-last call blk_dequeue_request and end_that_request_last .... By the way, Now I am also giving-up and now wait for some-other person's response, if there is some-thing missing in my understanding or I am wrong ! -- Fawad Lateef -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/