On Mon, Nov 03, 2008 at 11:06:07PM +0530, Aneesh Kumar K.V wrote: > +static void ext4_mb_generate_from_freelist(struct super_block *sb, void *bitmap, > + ext4_group_t group, > + struct ext4_free_data *entry) > +{ ... > + if (n->rb_left) { > + new_entry = rb_entry(n->rb_left, struct ext4_free_data, node); > + ext4_mb_generate_from_freelist(sb, bitmap, group, new_entry); > + } > + if (n->rb_right) { > + new_entry = rb_entry(n->rb_right, struct ext4_free_data, node); > + ext4_mb_generate_from_freelist(sb, bitmap, group, new_entry); > + } ext4_mb_generate_from_freelist() is recursively calling itself, which could easily blow the stack if there are a large number of items on the free list (remember, this can include data blocks if !ext4_should_writeback_data()). You should probably use rb_first and rb_next in a loop rather than a recursive descent. I also remain concerned that ext4_mb_generate_from_freelist() is could burn a large amount of CPU in some cases, and as I said on the conference call, if there is a way to avoid it, that would be a Good Thing. - Ted -- 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