Re: generic_file_write change in 2.4.0-ac8

Alexander Viro (viro@math.psu.edu)
Fri, 12 Jan 2001 16:30:44 -0500 (EST)


On Fri, 12 Jan 2001, Chris Mason wrote:

>
> Hi guys,
>
> This code for generic_file_write calls vmtruncate without i_sem held. Is
> that intentional? It should cause problems for reiserfs at least...

Erm... generic_file_write() grabs i_sem upon entry and drops it on exit.
This call of vmtruncate() is deep inside the protected area.

It is taken out of the main path for obvious reasons, but as far as
control flow counts it sits inside the main loop. FWIW, it might
as well be written as
....
status = mapping->a_ops->prepare_write(.....);
if (status) {
UnlockPage(page);
deactivate_page(page);
page_cache_release(page);
if (pos + bytes > inode->i_size)
vmtruncate(inode, inode->i_size);
break;
}
...
except that this variant would litter the main path. And the whole loop
is under the ->i_sem - check the beginning of the function.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/