linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* How best to bypass the page cache from within a kernel module?
@ 2003-09-17 18:24 Alan Stern
  2003-09-17 19:44 ` Dave Hansen
  2003-09-22 18:51 ` Ray Bryant
  0 siblings, 2 replies; 10+ messages in thread
From: Alan Stern @ 2003-09-17 18:24 UTC (permalink / raw)
  To: linux-mm

I'm working on a kernel module driver for Linux 2.6.  One of the things 
this driver needs to do is perform a VERIFY command; which means checking 
to make sure that certain disk sectors within a file actually can be read 
without encountering a bad sector or other hardware error.  Now, I realize 
that there are already issues involved with convincing the disk drive to 
read from its media rather than from its cache.  But apart from that, my 
problem is how to convince Linux to read from the drive rather than from 
the page cache.

One suggestion was to use O_DIRECT when opening the file, because that
does cause reads to go directly to the hardware.  The problem with this is
that since the direct-I/O routines send file data directly to user
buffers, they must check that the buffer addresses are valid and belong to
the user's address space.  But my code runs in a kernel thread so it has
no current->mm (and in any case I would prefer to use my kernel-space
buffers rather than user-space memory).  It might be possible to get hold
of an mm_struct, but it's not necessarily easy as mm_alloc() isn't
EXPORTed.  Perhaps my thread could keep its original current->mm by
incrementing current->mm->users before calling daemonize() and setting
current->mm back to its original value afterward.  Is that legal?  Having
done so, perhaps I could use some sort of mmap() call to allocate a
user-space buffer that would be okay for direct-I/O.  What's the best way
to do that -- what function would I have to call?

However, all that seems rather roundabout.  An equally acceptable solution 
would be simply to invalidate all the entries in the page cache referring 
to my file, so that reads would be forced to go to the drive.  Can anyone 
tell me how to do that?

TIA,

Alan Stern

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"aart@kvack.org"> aart@kvack.org </a>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2003-09-22 19:09 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-17 18:24 How best to bypass the page cache from within a kernel module? Alan Stern
2003-09-17 19:44 ` Dave Hansen
2003-09-17 19:50   ` William Lee Irwin III
2003-09-17 20:33     ` Alan Stern
2003-09-17 20:40       ` William Lee Irwin III
2003-09-17 20:43         ` William Lee Irwin III
2003-09-17 21:30         ` Alan Stern
2003-09-17 22:44           ` William Lee Irwin III
2003-09-22 18:51 ` Ray Bryant
2003-09-22 19:09   ` Alan Stern

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox