Thread (10 messages) 10 messages, 4 authors, 2007-02-08

Re: [PATCH 1 of 2] Implement generic block_page_mkwrite() functionality

From: David Chinner <hidden>
Date: 2007-02-08 22:31:22
Also in: linux-fsdevel, linux-mm

On Thu, Feb 08, 2007 at 08:11:00AM -0500, Chris Mason wrote:
On Thu, Feb 08, 2007 at 09:50:13AM +1100, David Chinner wrote:
quoted
quoted
You don't need to lock out all truncation, but you do need to lock
out truncation of the page in question.  Instead of your i_size
checks, check page->mapping isn't NULL after the lock_page?
Yes, that can be done, but we still need to know if part of
the page is beyond EOF for when we call block_commit_write()
and mark buffers dirty. Hence we need to check the inode size.

I guess if we block the truncate with the page lock, then the
inode size is not going to change until we unlock the page.
If the inode size has already been changed but the page not yet
removed from the mapping we'll be beyond EOF.

So it seems to me that we can get away with not using the i_mutex
in the generic code here.
vmtruncate changes the inode size before waiting on any pages.  So,
i_size could change any time during page_mkwrite.
Which would put us beyond EOF. Ok.
It would be a good idea to read i_size once and put it in a local var
instead.
Will do - I'll snap it once the page is locked....

Thanks Chris.

Cheers,

Dave.
-- 
Dave Chinner
Principal Engineer
SGI Australian Software Group
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help