generic_file_write change in 2.4.0-ac8
Subsystems (2)
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...
-chris
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.4.0/mm/filemap.c linux.ac/mm/filemap.c
mm/filemap.c +7 -0
@@ -2578,6 +2625,13 @@ClearPageUptodate (page);kunmap (page); goto unlock; +sync_failure: +UnlockPage (page); +deactivate_page (page); +page_cache_release (page); +if (pos + bytes > inode->i_size) +vmtruncate (inode, inode->i_size); + goto done; }
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 5 lines · Chris Mason
Hi guys,
This code for
generic_file_writecalls vmtruncate withouti_semheld. 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 [email protected]
Please read the FAQ at http://www.tux.org/lkml/
Quoted 5 lines · On Friday, January 12, 2001 04:30:44 PM -0500 Alexander Viro…
Quoted 1 line · Chris Mason
Quoted 8 lines
Quoted 4 lines
Hi guys,
This code for
generic_file_writecalls vmtruncate withouti_semheld. Is that intentional? It should cause problems for reiserfs at least...Erm...
generic_file_write()grabsi_semupon entry and drops it on exit. This call ofvmtruncate()is deep inside the protected area.
Yup, I'm trying to track down a different problem, and saw what I wanted to instead of what was really there. Sigh.
-chris
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/