On Thu, Aug 16, 2012 at 04:04:32PM -0600, Jan Kara wrote: > ext3 users of data=journal mode with blocksize < pagesize were occasionally > hitting assertion failure in journal_commit_transaction() checking whether the > transaction has at least as many credits reserved as buffers attached. The > core of the problem is that when a file gets truncated, buffers that still need > checkpointing or that are attached to the committing transaction are left with > buffer_mapped set. When this happens to buffers beyond i_size attached to a > page stradding i_size, subsequent write extending the file will see these > buffers and as they are mapped (but underlying blocks were freed) things go > awry from here. > > The assertion failure just coincidentally (and in this case luckily as we would > start corrupting filesystem) triggers due to journal_head not being properly > cleaned up as well. > > Under some rare circumstances this bug could even hit data=ordered mode users. > There the assertion won't trigger and we would end up corrupting the > filesystem. > > We fix the problem by unmapping buffers if possible (in lots of cases we just > need a buffer attached to a transaction as a place holder but it must not be > written out anyway). And in one case, we just have to bite the bullet and wait > for transaction commit to finish. > > Signed-off-by: Jan Kara <jack@xxxxxxx> You are my hero Jan Reviewed-by: Josef Bacik <jbacik@xxxxxxxxxxxx> Thanks, Josef -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html