Hi, in the patch attached I improved the memory usage for my data structures by using a kmem_cache. Also I do not use a single radix-tree for the pointers to the list anymore but every mapping gets its own... So I should be able to prefetch not only from the swap space but from other disk-places, too. But exactly this does not work and I need some help with this... If I do add pages from the swaper_space mapping to the prefetch list everything works perfectly. But as soon as I add all pages with a mapping to the list I get the Oops attached... :-( It happens in the radix_tree_delete call from the swap_prefetch work handler. So I think I access an invalid (perhaps not initialized?) radix tree... But why I wonder is that this entry was properly inserted to the tree, because else it would never had been inserted to the list! So I am only very confused..! Thanks for your help! Thomas Schlichter On April 12, Andrew Morton wrote: > Thomas Schlichter wrote: > > How can I get the file pointer for a buffered page with the information > > available in the kswapd (minly the page struct)?? > > You can't, really. There can be any number of file*'s pointing at an > inode. OK, I understand... > The pagefault handler will find it by find_vma(faulting_address)->vm_file. > Other codepaths use syscalls, and the user passed the file* in. > > You can call page_cache_readahead() with a NULL file*. That'll mostly work > except for the odd filesytem like NFS which will oops. But it's good > enough for testing and development. That's the way I try it now... ;-) > Or you could cook up a local file struct along the lines of > fs/nfsd/vfs.c:nfsd_read(), but I would not like to lead a young person > that way ;) Thx... ;-)