Files
linux/fs
Theodore Ts'o b90197b655 ext4: use private version of page_zero_new_buffers() for data=journal mode
If there is a error while copying data from userspace into the page
cache during a write(2) system call, in data=journal mode, in
ext4_journalled_write_end() were using page_zero_new_buffers() from
fs/buffer.c.  Unfortunately, this sets the buffer dirty flag, which is
no good if journalling is enabled.  This is a long-standing bug that
goes back for years and years in ext3, but a combination of (a)
data=journal not being very common, (b) in many case it only results
in a warning message. and (c) only very rarely causes the kernel hang,
means that we only really noticed this as a problem when commit
998ef75ddb caused this failure to happen frequently enough to cause
generic/208 to fail when run in data=journal mode.

The fix is to have our own version of this function that doesn't call
mark_dirty_buffer(), since we will end up calling
ext4_handle_dirty_metadata() on the buffer head(s) in questions very
shortly afterwards in ext4_journalled_write_end().

Thanks to Dave Hansen and Linus Torvalds for helping to identify the
root cause of the problem.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.com>
2015-10-15 10:29:05 -04:00
..
2015-06-30 19:44:57 -07:00
2015-06-23 18:02:01 -04:00
2015-06-25 17:00:42 -07:00
2015-09-08 15:35:28 -07:00
2015-08-16 12:35:44 -07:00
2015-08-13 12:32:04 -06:00
2015-08-13 12:32:04 -06:00
2015-04-11 22:29:40 -04:00
2015-09-08 15:35:28 -07:00
2014-11-19 13:01:20 -05:00
2015-07-09 11:42:21 -07:00
2015-08-13 12:32:04 -06:00
2015-07-23 20:59:40 +02:00
2015-08-12 15:28:45 -05:00
2015-08-31 16:27:25 -04:00
2015-09-04 16:54:41 -07:00
2015-08-13 12:32:04 -06:00
2014-08-26 09:35:56 +02:00