Thread (61 messages) 61 messages, 6 authors, 2008-08-16

Re: [PATCH v3]Ext4: journal credits reservation fixes for DIO, fallocate and delalloc writepages

From: Frédéric Bohé <hidden>
Date: 2008-08-04 10:13:55

Le vendredi 01 août 2008 à 20:03 -0400, Theodore Tso a écrit :
In any case, I figurd out why my patch wasn't enough.  There was a bug
in ext4_ext_journal_restart:

int ext4_ext_journal_restart(handle_t *handle, int needed)
{
	int err;

	if (handle->h_buffer_credits > needed)
		return 0;
	err = ext4_journal_extend(handle, needed);
	if (err)
		return err;
	return ext4_journal_restart(handle, needed);
}

This is buggy; ext4_journal_extend returns < 0 on an error, 0 if the
handle was successfully extended without needing a journal restart,
and > 0 if the ext4_journal_restart() needs to be called.  So the
current code returns a failure and doesn't restart the journal when it
is needed, and calls ext4_journal_restart() needlessly when it is not
needed and the handle could be extended without closing the current
transaction.

The fix is a simple one-liner:

int ext4_ext_journal_restart(handle_t *handle, int needed)
{
	int ret;

	if (handle->h_buffer_credits > needed)
		return 0;
	err = ext4_journal_extend(handle, needed);
	if (ret < = 0)
		return ret;
	return ext4_journal_restart(handle, needed);
}

This seems to indicate ext4_ext_journal_restart() has never been
called in anger by the ext4_ext_truncate() code.  We may want to
double check it with a really big, mongo extent tree and make sure it
does the right thing one of these days.

							- Ted
FYI, I have just tried this fix, and i don't see the "orphan list check
failed" messages any more.

Fred




--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help