[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FW: Shell copy_file() issue with NFS and small MAC receive buffer



I have solved the issue (See patch below).  There was another bug in the nfs_do_evalpath() function related to the union that was added for 4.10.  It's also in the patch.

--- nfs_old.c       2010-07-01 11:18:06.000000000 -0400
+++ nfs.c             2011-03-31 19:47:08.000000000 -0400
@@ -1574,7 +1575,7 @@
                                 */
                                assert( node->args.name );

-                              *(const char**)arg = pathname + (node->args.name - p);
+                             *(arg->c) = pathname + (node->args.name - p);

 #if 0
                                /* restore the directory node */
@@ -2616,6 +2617,9 @@
                if (count > NFS_MAXDATA)
                                count = NFS_MAXDATA;

+             if (count > nfsStBlksize)
+                             count = nfsStBlksize;
+
                SERP_ARGS(node).readarg.offset                           = iop->offset;
                SERP_ARGS(node).readarg.count                            = count;
                SERP_ARGS(node).readarg.totalcount   = UINT32_C(0xdeadbeef);
@@ -2720,6 +2724,8 @@
                if (count > NFS_MAXDATA)
                                count = NFS_MAXDATA;

+             if (count > nfsStBlksize)
+                             count = nfsStBlksize;

                SERP_ARGS(node).writearg.beginoffset   = UINT32_C(0xdeadbeef);
                if ( LIBIO_FLAGS_APPEND & iop->flags ) {

From: Kirspel, Kevin
Sent: Thursday, March 31, 2011 5:59 PM
To: rtems-users at rtems.org
Subject: Shell copy_file() issue with NFS and small MAC receive buffer

I am upgrading from 4.9 to 4.10 and I have come across an issue between the RTEMS shell and NFS networking.

In 4.10, I cannot copy files from an NFS share to the RTEMS file system (which works fine in 4.9).  I traced it back to the copy_file() function in the RTEMS shell (utils-cp.c).  In the 4.9 version, the buffer size was set to 4096.  In 4.10, the buffer size is set to 8192.  This causes a problem with my NFS because my Ethernet MAC/PHY only has a 8192 receive buffer.  I have to set the NFS nfsStBlksize to 4096 to prevent buffer overflows.  The copy_file() function is requesting 8192 bytes from the nfs_file_read() function which has only a4096 block size.  In this case, the NFS server does not respond to the request.  I get the following error:

RPCIO: server '192.168.21.204' not responding - still trying
NFS (proc 6) - RPC: Timed out

What is the appropriate way to fix this scenario?  Should I have a while loop in the nfs_file_read() function to process multiple NFS requests until I get all the bytes needed?

Kevin Kirspel
Senior Electrical Engineer
Opti Medical
235 Hembree Park Drive
Roswell GA 30076
Tel: (770)-510-4444 ext. 81642
Direct: (770)-688-1642
Fax: (770)-510-4445

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.rtems.org/pipermail/rtems-users/attachments/20110331/46bcfe5a/attachment.html>