feiwu,
I cannot see anything obviously wrong with your code.
What eeprom addresses are you writing to (your vaiable eeprom_a)?
It is strange that you are getting correct results in the first section but not in the second. In fact, you are actually using sequential read in both sections. You are reading the address just before the one just written with an ACK, followed by the actual location with a NACK. The is perfectly valid.
You appear to be only reading back 7 bytes in your second section.
One comment I would make is that you are performing a long delay using a counting loop. Have you checked that this is actually giving sufficient delay, since clock speed, processor type and optimization level can effect this. After your write operation you must wait for about 10mS before attempting any further comms with your eeprom. You might want to consider using usleep(), since this will give a known delay.
I may be worth looking at what is happening on the i2c pins using an oscilloscope or use Signal-Tap to analyse the real time activity.