[pnfs] git tree up to date

William A. (Andy) Adamson andros at citi.umich.edu
Tue Mar 27 09:23:33 EDT 2007


hi marc

ok - it's applied.

thanks

-->Andy

On 3/26/07, Marc Eshel <eshel at almaden.ibm.com> wrote:
>
> Hi Andy,
> You did not include this patch
> Marc.
>
>
> Marc Eshel wrote:
>
> >From: Marc Eshel <eshel at almaden.ibm.com>
> >
> >This is a temporary fix to allow for the MDS and DS to be on the same
> >machine and share a session. There are still problem on the second mount,
> >some fields are not cleaned/reset properly after the first umount.
> >---
> >
> > fs/nfs/nfs4filelayoutdev.c |   54
> ++++++++++++++++++++++++++------------------
> > 1 files changed, 32 insertions(+), 22 deletions(-)
> >
> >diff --git a/fs/nfs/nfs4filelayoutdev.c b/fs/nfs/nfs4filelayoutdev.c
> >index acb36fa..8861f4f 100644
> >--- a/fs/nfs/nfs4filelayoutdev.c
> >+++ b/fs/nfs/nfs4filelayoutdev.c
> >@@ -117,19 +117,24 @@ device_create(struct nfs_server *server,
> >               goto out;
> >       }
> >
> >-      dprintk("device_create: dev_id=%u, ip=%x, port=%hu\n",
> dev->dev_id, ntohl(dev->ip_addr), ntohs(dev->port));
> >+      dprintk("device_create: dev_id=%u, ip=%x, port=%hu, rpcclient
> %p\n",
> >+              dev->dev_id, ntohl(dev->ip_addr), ntohs(dev->port),
> clp->cl_rpcclient);
> >
> >-      xprt = xprt_create_proto(IPPROTO_TCP, &sin,
> >-                               &mds_rpc->cl_xprt->timeout);
> >-      if (IS_ERR(xprt)) {
> >-              err = PTR_ERR(xprt);
> >-              goto out;
> >-      }
> >+      if (PTR_ERR(clp->cl_rpcclient) == -EINVAL || clp->cl_rpcclient ==
> NULL)
> >+      {
> >+              xprt = xprt_create_proto(IPPROTO_TCP, &sin,
> >+                                       &mds_rpc->cl_xprt->timeout);
> >+              if (IS_ERR(xprt)) {
> >+                      err = PTR_ERR(xprt);
> >+                      goto out;
> >+              }
> >
> >-      clp->cl_rpcclient = create_nfs_rpcclient(xprt,
> "nfs4_pnfs_dserver", mds_rpc->cl_vers, mds_rpc->cl_auth->au_flavor, &err);
> >-      if (clp->cl_rpcclient == NULL) {
> >-              printk("%s: Can't create nfs rpc client!\n",
> __FUNCTION__);
> >-              goto out;
> >+              clp->cl_rpcclient = create_nfs_rpcclient(xprt,
> "nfs4_pnfs_dserver", mds_rpc->cl_vers, mds_rpc->cl_auth->au_flavor, &err);
> >+              if (clp->cl_rpcclient == NULL) {
> >+                      printk("%s: Can't create nfs rpc client!\n",
>
> >+                                                              __FUNCTION__);
> >+                      goto out;
> >+              }
> >       }
> >
> >       dev->clp = clp;
> >@@ -146,12 +151,16 @@ device_destroy(struct nfs4_pnfs_dev_item
> >       if (!dev)
> >               return;
> >
> >-      if ((status = _nfs4_proc_destroy_session(&dev->clp->cl_session,
> dev->clp->cl_rpcclient)))
> >-              printk(KERN_WARNING "destroy session on data server failed
> with status %d...\
> >+      /* if not created for DS just return */
> >+      if (dev->clp->cl_exchange_flags & EXCHGID4_FLAG_USE_PNFS_DS) {
> >+
> >+              if ((status =
> _nfs4_proc_destroy_session(&dev->clp->cl_session, dev->clp->cl_rpcclient)))
> >+                      printk(KERN_WARNING "destroy session on data
> server failed with status %d...\
> >                                blowing away device anyways!\n", status);
> >
> >-      /*      BUG_ON(!atomic_sub_and_test(0, &dev->count)); */
> >-      rpc_shutdown_client(dev->clp->cl_rpcclient);
> >+              /*      BUG_ON(!atomic_sub_and_test(0, &dev->count)); */
> >+              rpc_shutdown_client(dev->clp->cl_rpcclient);
> >+      }
> >
> >       kfree(dev);
> > }
> >@@ -217,14 +226,15 @@ nfs4_pnfs_device_add(struct filelayout_m
> >               return err;
> >       }
> >
> >-      /* Set exchange id and create session flags */
> >-      dev->clp->cl_session_flags = 0;
> >-      dev->clp->cl_exchange_flags = EXCHGID4_FLAG_USE_PNFS_DS;
> >-
> >-      err = server->rpc_ops->setup_session(dev->clp);
> >-      if (err)
> >-              return err;
> >+      if (dev->clp->cl_session == NULL) {
> >+              /* Set exchange id and create session flags */
> >+              dev->clp->cl_session_flags = 0;
> >+              dev->clp->cl_exchange_flags = EXCHGID4_FLAG_USE_PNFS_DS;
> >
> >+              err = server->rpc_ops->setup_session(dev->clp);
> >+              if (err)
> >+                      return err;
> >+        }
> >       /* Write lock, do lookup again, and then add device */
> >       write_lock(&hlist->dev_lock);
> >       tmp_dev = _device_lookup(hlist, dev->dev_id);
> >_______________________________________________
> >pNFS mailing list
> >pNFS at linux-nfs.org
> >http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
> >
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://linux-nfs.org/pipermail/pnfs/attachments/20070327/4e4cd1e8/attachment.htm 


More information about the pNFS mailing list