[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