I've made some tests and from that it seems that the client somehow knows about the redirect:
user@client $ df dir_a
dir_a(auto_direct ): 0 blocks 0 files
I've made some file access in dir_a and watched the interfaces of the client towards server_a and server_b.
On the client I did:
cd dir_a; while true; do echo 1111111111111111111111111111 >> t; done
On the client's interface to server_a there was no traffic increase (only in the total traffic): (the time when the above script loop was running is marked with * below.)
nmsadm@atrcxb1951: netstat -I bnxe0 10
input bnxe0 output input (Total) output
packets errs packets errs colls packets errs packets errs colls
8819 0 4476 0 0 8920 0 4494 0 0
8800 0 4451 0 0 8871 0 4466 0 0
8753 0 4371 0 0 27468 0 26777 0 0 *
8704 0 4378 0 0 27772 0 27227 0 0 *
8734 0 4381 0 0 28425 0 28044 0 0 *
8789 0 4453 0 0 13053 0 9317 0 0
8765 0 4407 0 0 8871 0 4420 0 0
While on the client's interface towards server_b there was:
nmsadm@atrcxb1951:~$ netstat -I bnxe4 10
input bnxe4 output input (Total) output
packets errs packets errs colls packets errs packets errs colls
121 0 17 0 0 8942 0 4494 0 0
10467 0 12473 0 0 19264 0 16927 0 0 *
18579 0 22362 0 0 27291 0 26732 0 0 *
21735 0 25978 0 0 30466 0 30364 0 0 *
10971 0 12970 0 0 19760 0 17395 0 0 *
35 0 12 0 0 8782 0 4432 0 0
So in my case it seems that the client handles the redirection and server_a is not proxying the NFS data traffic.
I'd be still curious about under what circumstances does this work like this. Any configuration option, etc.