[pnfs] CVS: nfsv4
Marc Eshel IBM
eshel at citi.umich.edu
Sat Feb 24 17:12:25 EST 2007
CVSROOT: /cvs
Module name: nfsv4
Changes by: eshel at citi.umich.edu 2007/02/24 17:12:25
Modified files:
cvs/pnfs/fs/nfs: nfs4filelayout.c nfs4filelayout.h
nfs4filelayoutdev.c nfs4proc.c
Log message:
First step for adding exchange id for pNFS client. For now it looks like a
regular client until we add the pNFS flag to the protocol.
The DS will have to avoid expiring the client since it doesn't renew its state.
Index: nfs4filelayout.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4filelayout.c,v
retrieving revision 1.32
diff -u -r1.32 nfs4filelayout.c
--- nfs4filelayout.c 30 Jan 2007 21:24:57 -0000 1.32
+++ nfs4filelayout.c 24 Feb 2007 21:49:09 -0000
@@ -276,8 +276,8 @@
status = 0;
}
else {
- data->pnfs_client = dserver.dev_item->rpc_clnt;
- data->session = dserver.dev_item->session;
+ data->pnfs_client = dserver.dev_item->clp->cl_rpcclient;
+ data->session = dserver.dev_item->clp->cl_session;
data->args.fh = dserver.fh;
/* Now get the file offset on the dserver
@@ -353,8 +353,8 @@
&dserver);
/* ANDROS: XXX should fail if no data server */
if(!status) {
- data->pnfs_client = dserver.dev_item->rpc_clnt;
- data->session = dserver.dev_item->session;
+ data->pnfs_client = dserver.dev_item->clp->cl_rpcclient;
+ data->session = dserver.dev_item->clp->cl_session;
data->args.fh = dserver.fh;
}
dprintk("%s set wb_devid %d\n", __FUNCTION__,
@@ -564,8 +564,8 @@
dprintk("%s call nfs_commit_rpcsetup i %d devid %d\n",
__FUNCTION__, i, dev_id);
- dsdata->pnfs_client = dserver.dev_item->rpc_clnt;
- dsdata->session = dserver.dev_item->session;
+ dsdata->pnfs_client = dserver.dev_item->clp->cl_rpcclient;
+ dsdata->session = dserver.dev_item->clp->cl_session;
nfs_commit_rpcsetup(dsdata, sync);
Index: nfs4filelayout.h
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4filelayout.h,v
retrieving revision 1.9
diff -u -r1.9 nfs4filelayout.h
--- nfs4filelayout.h 31 Jan 2007 23:42:54 -0000 1.9
+++ nfs4filelayout.h 24 Feb 2007 21:49:09 -0000
@@ -36,8 +36,7 @@
u32 ip_addr;
u32 port;
atomic_t count;
- struct rpc_clnt *rpc_clnt;
- struct nfs4_session *session;
+ struct nfs4_client *clp;
};
struct nfs4_pnfs_dev_hlist {
Index: nfs4filelayoutdev.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4filelayoutdev.c,v
retrieving revision 1.13
diff -u -r1.13 nfs4filelayoutdev.c
--- nfs4filelayoutdev.c 31 Jan 2007 23:42:54 -0000 1.13
+++ nfs4filelayoutdev.c 24 Feb 2007 21:49:09 -0000
@@ -97,17 +97,26 @@
/* Create an rpc to the data server defined in 'dev' */
static int
-device_create(struct rpc_clnt *mds_rpc, struct nfs4_pnfs_dev_item *dev)
+device_create(struct nfs_server *server, struct nfs4_pnfs_dev_item *dev)
{
- struct rpc_clnt *clnt;
+ struct nfs4_client *clp;
struct rpc_xprt *xprt;
struct sockaddr_in sin;
+ struct rpc_clnt *mds_rpc = server->client;
int err = 0;
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = dev->ip_addr;
sin.sin_port = dev->port;
+ clp = server->rpc_ops->get_client(&sin.sin_addr);
+ if (!clp) {
+ err = PTR_ERR(clp);
+ dprintk("%s: failed to create NFS4 client err %d\n",
+ __FUNCTION__, err);
+ goto out;
+ }
+
dprintk("device_create: dev_id=%u, ip=%x, port=%hu\n", dev->dev_id, ntohl(dev->ip_addr), ntohs(dev->port));
xprt = xprt_create_proto(IPPROTO_TCP, &sin,
@@ -117,15 +126,15 @@
goto out;
}
- clnt = create_nfs_rpcclient(xprt, "nfs4_pnfs_dserver", mds_rpc->cl_vers, mds_rpc->cl_auth->au_flavor, &err);
- if (clnt == NULL) {
+ 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->rpc_clnt = clnt;
-
- out:
+ dev->clp = clp;
+out:
+ printk("%s: exit err %d clp %p\n", __FUNCTION__, err, clp);
return err;
}
@@ -137,12 +146,12 @@
if (!dev)
return;
- if ((status = _nfs4_proc_destroy_session(&dev->session, dev->rpc_clnt)))
+ 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->rpc_clnt);
+ rpc_shutdown_client(dev->clp->cl_rpcclient);
kfree(dev);
}
@@ -201,17 +210,14 @@
dprintk("nfs4_pnfs_device_add\n");
/* Create device */
- err = device_create(server->client, dev);
- if (err)
+ err = device_create(server, dev);
+ if (err) {
+ printk(KERN_EMERG "%s: cannot create RPC client. Error = %d\n",
+ __FUNCTION__, err);
return err;
+ }
- dev->session = nfs41_alloc_session();
- if (!dev->session)
- return -ENOMEM;
-
- err = _nfs4_proc_create_session(server->nfs4_state,
- dev->session, dev->rpc_clnt);
-
+ err = server->rpc_ops->setup_session(dev->clp);
if (err)
return err;
@@ -448,8 +454,9 @@
* an ioctl on the NFSv4 file layout driver to decrement the device count.
*/
static void
-nfs4_pnfs_device_put(struct nfs4_pnfs_dev_hlist *hlist, struct nfs4_pnfs_dev_item *dev)
+nfs4_pnfs_device_put(struct nfs_server *server, struct nfs4_pnfs_dev_hlist *hlist, struct nfs4_pnfs_dev_item *dev)
{
dprintk("nfs4_pnfs_device_put: dev_id=%u\n", dev->dev_id);
+ server->rpc_ops->put_client(dev->clp);
atomic_dec(&dev->count);
}
Index: nfs4proc.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4proc.c,v
retrieving revision 1.44
diff -u -r1.44 nfs4proc.c
--- nfs4proc.c 3 Feb 2007 18:40:09 -0000 1.44
+++ nfs4proc.c 24 Feb 2007 21:49:10 -0000
@@ -5202,7 +5202,7 @@
static int _nfs4_proc_setlk(struct nfs4_state *state, int cmd, struct file_lock *request)
{
struct nfs4_client *clp = state->owner->so_client;
- unsigned char fl_flags = request->fl_flags;
+ u32 fl_flags = request->fl_flags;
int status;
/* Is this a delegated open? */
@@ -5625,6 +5625,7 @@
.setup_session = nfs41_proc_setup_session,
.setup_sequence = nfs41_proc_setup_sequence_call,
.sequence_done = nfs41_proc_sequence_done,
+ .get_client = nfs4_get_client,
};
struct nfs_rpc_ops pnfs_v4_clientops = {
@@ -5681,6 +5682,8 @@
.setup_session = nfs41_proc_setup_session,
.setup_sequence = nfs41_proc_setup_sequence_call,
.sequence_done = nfs41_proc_sequence_done,
+ .get_client = nfs4_get_client,
+ .put_client = nfs4_put_client,
};
struct nfs_rpc_ops *nfsv4_minorversion_clientops[] = {
More information about the pNFS
mailing list