Apparently the dispatch function is defined/prototyped both in cons.c and include/cons.h, but defined somewhat differently (enough to make the compiler fail). All you have to do is to remove one of the prototypes for this function.

Also, later on you'll notice it failing to define memset() in include/string.h, which was previously defined in another header.
This is bacause the linux/ext2_fs.h has a dependency on string.h, and below here you'll se the croped output of gcc $CFLAGS -H fs/ext2.c.

I have not had the "upp-and-go" to do a proper fix for this, but since the two prototypes of memset are almost identical, you should *maybe* get the same result by omiting memset in the local include/string.h, after which it does seem to compile with only a few warnings (perhaps you need to add string.h to some other files?!?).