On Sun, Apr 30, 2000 at 04:46:37AM -0400, Erez Zadok wrote:
> Background: my stacking code for linux is minimal.  I only stack on things I
> absolutely have to.  By "stack on" I mean that I save a link/pointer to a
> lower-level object in the private data field of an upper-level object.  I do
> so for struct file, inode, dentry, etc.  But I do NOT stack on pages.  Doing
> so would complicate stacking considerably.  So far I was able to avoid this
> b/c every function that deals with pages also passes a struct file/dentry to
> it so I can find the correct lower page.
> 
> The new method, sync_page() is only passed a struct page.  So I cannot stack
> on it!  If I have to stack on it, I'll have to either

 If inode will be enough for you than ( as it is implemented in nfs_sync_page )
you can do something like: 
   struct inode    *inode = (struct inode *)page->mapping->host;

> (2) change the kernel so that every instance of sync_page is passed the
>     corresponding struct file.  This isn't pretty either.
> 

   Did you see my letter about readpage ? Nevertheless, I think that first
argument of every function from address_space_operations should be 
"struct file *" and AFAIK this is 1) possible with the current kernel 2) will
simplify things a lot since it lets one to see the whole picture:
file->dentry->inode->pages, not the particular spot.

Roman.

Reply via email to