Hi Jeff, Thanks for reply. On 2 July 2014 18:55, Jeff Moyer <jmoyer@xxxxxxxxxx> wrote: > Hi, Dmitry, > > Dmitry Kasatkin <d.kasatkin@xxxxxxxxxxx> writes: > >> Hi, >> >> We are looking for advice on reading files opened for direct_io. > > [snip] > >> 2. Temporarily clear O_DIRECT in file->f_flags. > > [snip] > >> 3. Open another instance of the file with 'dentry_open' > > [snip] > >> Is temporarily clearing O_DIRECT flag really unacceptable or not? > > It's acceptable. However, what you're proposing to do is read the > entire file into the page cache to calculate your checksum. Then, when > the application goes to read the file using O_DIRECT, it will ignore the > cached copy and re-read the portions of the file it wants from disk. So > yes, you can do that, but it's not going to be fast. If you want to > avoid polluting the cache, you can call invalidate_inode_pages2_range > after you're done calculating your checksum. > Ok. If I understand correctly, after reading chunck/range like kernel_read(offset, len), just always drop loaded pages like invalidate_inode_pages2_range(inode->i_mapping, offset, offset + len); I see that generic_file_direct_write() calls this function too, before doing direct IO and after... Thanks! >> Or may be there is a way to allocate "special" user-space like buffer >> for kernel and use it with O_DIRECT? > > In-kernel O_DIRECT support has been proposed in the past, but there is > no solution for that yet. > > Cheers, > Jeff -- Thanks, Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html