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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html