Your flash:
[cfe][firmware.....................][jffs2][nvram]
You will always have a jffs2 partition.
What is "firmware"?
The firmware is the kernel, and optionally squashfs:
[cfe][[kernel ... ] [squashfs ... ]][jffs2][nvram]
What happens when I reflash?
The kernel and squashfs get overwritten by a newer version which may be larger or smaller
[cfe][[kernel] [squashfs .....]][jffs2][nvram]
or
[cfe][[kernel ...... ] [squashfs]][jffs2][nvram]
Wait! the squashfs and jffs2 moved! What happens if I tried to read from the old squashfs location?
It crashes.
What happens if I try to write something to the old squashfs?
It corrupts the new squashfs or kernel.
Why did jffs2 move?
Jffs2 is placed immediately after the firmware, if your firmware size changes then jffs2 changes.
Does reading/writing to jffs2 after a reflash have the same problems?
Yes, this is why we insist that you use the mtd -r to reboot immediately after reflashing.
How does openwrt know not to use my old jffs2 data after reflashing?
There is a byte in the firmware which is checked by the startup scripts. In the firmware image this byte is turned on, which means "erase jffs2 and run firstboot". When firstboot finishes the byte will be turned off. Whenever you reflash, you will be reflashing this byte and firstboot will run again.