summaryrefslogtreecommitdiff
path: root/nuttx/fs/nfs/nfs_vfsops.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/fs/nfs/nfs_vfsops.c')
-rw-r--r--nuttx/fs/nfs/nfs_vfsops.c47
1 files changed, 42 insertions, 5 deletions
diff --git a/nuttx/fs/nfs/nfs_vfsops.c b/nuttx/fs/nfs/nfs_vfsops.c
index 12c4705dd..3cd5a47dc 100644
--- a/nuttx/fs/nfs/nfs_vfsops.c
+++ b/nuttx/fs/nfs/nfs_vfsops.c
@@ -81,7 +81,6 @@
#include "nfs_node.h"
#include "nfs_mount.h"
#include "xdr_subs.h"
-#include "nfs_socket.h"
/****************************************************************************
* Pre-processor Definitions
@@ -104,6 +103,18 @@
#endif
/****************************************************************************
+ * Public Variables
+ ****************************************************************************/
+
+uint32_t nfs_true;
+uint32_t nfs_false;
+uint32_t nfs_xdrneg1;
+
+#ifdef CONFIG_NFS_STATISTICS
+struct nfsstats nfsstats;
+#endif
+
+/****************************************************************************
* Private Type Definitions
****************************************************************************/
@@ -947,6 +958,7 @@ static ssize_t nfs_write(FAR struct file *filep, const char *buffer,
/* Now loop until we send the entire user buffer */
+ writesize = 0;
for (byteswritten = 0; byteswritten < buflen; )
{
/* Make sure that the attempted write size does not exceed the RPC maximum */
@@ -1578,6 +1590,7 @@ static int nfs_bind(FAR struct inode *blkdriver, FAR const void *data,
{
FAR struct nfs_args *argp = (FAR struct nfs_args *)data;
FAR struct nfsmount *nmp;
+ struct rpcclnt *rpc;
struct rpc_call_fs getattr;
struct rpc_reply_getattr resok;
struct nfs_mount_parameters nprmt;
@@ -1643,7 +1656,11 @@ static int nfs_bind(FAR struct inode *blkdriver, FAR const void *data,
/* Initialize NFS */
- nfs_init();
+ nfs_true = txdr_unsigned(TRUE);
+ nfs_false = txdr_unsigned(FALSE);
+ nfs_xdrneg1 = txdr_unsigned(-1);
+
+ rpcclnt_init();
/* Set initial values of other fields */
@@ -1665,7 +1682,27 @@ static int nfs_bind(FAR struct inode *blkdriver, FAR const void *data,
{
/* Connection-less... connect now */
- error = nfs_connect(nmp);
+ /* Create an instance of the rpc state structure */
+
+ rpc = (struct rpcclnt *)kzalloc(sizeof(struct rpcclnt));
+ if (!rpc)
+ {
+ fdbg("ERROR: Failed to allocate rpc structure\n");
+ return ENOMEM;
+ }
+
+ fvdbg("Connecting\n");
+
+ /* Translate nfsmnt flags -> rpcclnt flags */
+
+ rpc->rc_path = nmp->nm_path;
+ rpc->rc_name = &nmp->nm_nam;
+ rpc->rc_sotype = nmp->nm_sotype;
+ rpc->rc_retry = nmp->nm_retry;
+
+ nmp->nm_rpcclnt = rpc;
+
+ error = rpcclnt_connect(nmp->nm_rpcclnt);
if (error != OK)
{
fdbg("ERROR: nfs_connect failed: %d\n", error);
@@ -1708,7 +1745,7 @@ bad:
{
/* Disconnect from the server */
- nfs_disconnect(nmp);
+ rpcclnt_disconnect(nmp->nm_rpcclnt);
/* Free connection-related resources */
@@ -1772,7 +1809,7 @@ int nfs_unbind(FAR void *handle, FAR struct inode **blkdriver)
/* Disconnect from the server */
- nfs_disconnect(nmp);
+ rpcclnt_disconnect(nmp->nm_rpcclnt);
/* And free any allocated resources */