Ian Kent eb3e266
am-utils-6.2 - use new get_nfs_xprt() and put_nfs_xprt() functions
Ian Kent eb3e266
Ian Kent eb3e266
From: Ian Kent <raven@themaw.net>
Ian Kent eb3e266
Ian Kent eb3e266
The nfs_quick_reply() function needs to know the current RPC transport
Ian Kent eb3e266
outside of the NFS LOOKUP method call. It needs this to reply to the
Ian Kent eb3e266
NFS LOOKUP call that initiated the mount.
Ian Kent eb3e266
Ian Kent eb3e266
Now there are functions that avoid transport corruption if another
Ian Kent eb3e266
request comes in during the backgroud mount make nfs_quick_reply()
Ian Kent eb3e266
use them.
Ian Kent eb3e266
Ian Kent eb3e266
Signed-off-by: Ian Kent <raven@themaw.net>
Ian Kent eb3e266
---
Ian Kent eb3e266
 amd/amfs_generic.c |    3 +--
Ian Kent eb3e266
 amd/map.c          |    2 +-
Ian Kent eb3e266
 amd/nfs_subr.c     |    3 ++-
Ian Kent eb3e266
 3 files changed, 4 insertions(+), 4 deletions(-)
Ian Kent eb3e266
Ian Kent eb3e266
diff --git a/amd/amfs_generic.c b/amd/amfs_generic.c
Ian Kent eb3e266
index c352a32..86d0ab7 100644
Ian Kent eb3e266
--- a/amd/amfs_generic.c
Ian Kent eb3e266
+++ b/amd/amfs_generic.c
Ian Kent eb3e266
@@ -1129,8 +1129,7 @@ amfs_generic_mount_child(am_node *new_mp, int *error_return)
Ian Kent eb3e266
    */
Ian Kent eb3e266
   if (current_transp && !new_mp->am_transp) {
Ian Kent eb3e266
     dlog("Saving RPC transport for %s", new_mp->am_path);
Ian Kent eb3e266
-    new_mp->am_transp = (SVCXPRT *) xmalloc(sizeof(SVCXPRT));
Ian Kent eb3e266
-    *(new_mp->am_transp) = *current_transp;
Ian Kent eb3e266
+    new_mp->am_transp = get_nfs_xprt(current_transp);
Ian Kent eb3e266
   }
Ian Kent eb3e266
   if (error && new_mp->am_al && new_mp->am_al->al_mnt &&
Ian Kent eb3e266
       (new_mp->am_al->al_mnt->mf_ops == &amfs_error_ops))
Ian Kent eb3e266
diff --git a/amd/map.c b/amd/map.c
Ian Kent eb3e266
index 0d404cf..bcb2156 100644
Ian Kent eb3e266
--- a/amd/map.c
Ian Kent eb3e266
+++ b/amd/map.c
Ian Kent eb3e266
@@ -471,7 +471,7 @@ free_map(am_node *mp)
Ian Kent eb3e266
   XFREE(mp->am_name);
Ian Kent eb3e266
   XFREE(mp->am_path);
Ian Kent eb3e266
   XFREE(mp->am_pref);
Ian Kent eb3e266
-  XFREE(mp->am_transp);
Ian Kent eb3e266
+  put_nfs_xprt(mp->am_transp);
Ian Kent eb3e266
 
Ian Kent eb3e266
   if (mp->am_al)
Ian Kent eb3e266
     free_loc(mp->am_al);
Ian Kent eb3e266
diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c
Ian Kent eb3e266
index 0a43b98..07d960d 100644
Ian Kent eb3e266
--- a/amd/nfs_subr.c
Ian Kent eb3e266
+++ b/amd/nfs_subr.c
Ian Kent eb3e266
@@ -291,7 +291,8 @@ nfs_quick_reply(am_node *mp, int error)
Ian Kent eb3e266
     /*
Ian Kent eb3e266
      * Free up transp.  It's only used for one reply.
Ian Kent eb3e266
      */
Ian Kent eb3e266
-    XFREE(mp->am_transp);
Ian Kent eb3e266
+    put_nfs_xprt(mp->am_transp);
Ian Kent eb3e266
+    mp->am_transp = NULL;
Ian Kent eb3e266
     dlog("Quick reply sent for %s", mp->am_al->al_mnt->mf_mount);
Ian Kent eb3e266
   }
Ian Kent eb3e266
 }