问题描述
当NFS缓存大小大于单个以太网数据包(1372字节)中的用户数据量时,NFS文件读取失败。似乎发生读错误是因为M_EOR(记录结束标志)由文件“xemac_end_adapter.c”中的函数FifoRecvInt设置,该文件是BSP的一部分。这导致在Wind River套接字接收例程(soreceive)期间设置MSG_EOR标志。当正在计算可从网络内存缓冲区读取的数据长度时,遇到此标志将导致执行流程突破while循环,循环遍历包含用户数据的内存缓冲区,将它们的长度相加直到它达到NFS缓存的长度。完成此计算以确保缓冲区包含至少与读取器尝试读取的数据一样多的数据。因为此标志将导致计算在第一个数据包的数据结束时停止,如果NFS缓存大小大于该数据大小,它将很快退出。然后,当稍后在计算的大小和要读取的期望大小之间进行比较时,似乎没有足够的数据(因为计算的长度太短)。这会导致读取失败。
解决/修复方法
通过更改“xemac_end_adpater.c”文件的修订版1.00f可以解决此问题。通过更改FifoRecvInt中的行来设置标志“MblkPtr-> mBlkHdr.mFlags | =(M_EXT | M_PKTHDR | M_EOR);”到“MblkPtr-> mBlkHdr.mFlags | =(M_EXT | M_PKTHDR);”),问题将得到解决。
没有回复内容