Thanks for reply. I did some research and I think I have found something. The function set_time() in attr.c use function utime() to change the timestamp of a file. When the target is a symlink file, utime() will follow the symlink, and if the symlink points to a non-existent file, utime() will return -1. I made a work around for my condition, but the patch code still has some limitation: the code can not determine if the nfs client wants to modify the symlink file itself or to follow the symlink...
lutimes for symlink file failed with "Stale file handle"