Re: Stack usage - patch 1 of 2

John Hughes <[email protected]>
Newsgroups gmane.linux.cluster.ssic.devel
Message-ID <[email protected]>
Patch part 1 of 2

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword

_______________________________________________
ssic-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ssic-linux-devel
cfs-stack-usage.patch (text/x-patch, 34.8 KB)
Index: kernel/cluster/ssi/cfs/proc.c
===================================================================
RCS file: /usr/local/lib/cvs-repo/sourceforge-openssi/kernel/cluster/ssi/cfs/proc.c,v
retrieving revision 1.18
retrieving revision 1.18.4.3
diff -u -r1.18 -r1.18.4.3
--- kernel/cluster/ssi/cfs/proc.c	10 Oct 2008 08:10:32 -0000	1.18
+++ kernel/cluster/ssi/cfs/proc.c	15 Jan 2009 14:30:18 -0000	1.18.4.3
@@ -97,6 +97,9 @@
  * Get inode information with just a handle, instead of doing a lookup:
  * for later for reopen
  */
+static int cfs_proc_getinode_remote(struct cfs_server *server, struct cfs_fh *fhandle,
+		  struct inode **ipp);
+
 static int
 cfs_proc_getinode(struct cfs_server *server, struct cfs_fh *fhandle,
 		  struct inode **ipp)
@@ -174,23 +177,7 @@
 			status = -EACCES;
 		HASH_RELE(hp);
 	} else {
-		struct cfsgetinoarg arg;
-		struct cfsdiropres res;
-		struct cfs_nettok res_toks[CFS_NTOKS];
-
-		res.cdr_res_toks = res_toks;
-		arg.cgia_fh = *fhandle;
-		cfstok_get_agent(&arg.cgia_agent);
-		status = rcfscall(server, CFSD_PROC_GETINODE,
-				(xdrproc_t)xdr_cfsgetinoarg,
-				(caddr_t)&arg,
-				(xdrproc_t)xdr_cfsdiropres,
-				(caddr_t)&res);
-		if (!status)
-			status = res.cdr_status;
-		if (!status)
-			*ipp = __cfs_fhget(server->mi_sb, &res.cdr_cdrok,
-					   *ipp);
+		status = cfs_proc_getinode_remote(server, fhandle, ipp);
 	}
 
 sb_error_check:
@@ -202,7 +189,35 @@
 	return status;
 }
 
+static int
+cfs_proc_getinode_remote(struct cfs_server *server, struct cfs_fh *fhandle,
+		  struct inode **ipp)
+{
+	int status;
+
+	struct cfsgetinoarg arg;
+	struct cfsdiropres res;
+	struct cfs_nettok res_toks[CFS_NTOKS];
+
+	res.cdr_res_toks = res_toks;
+	arg.cgia_fh = *fhandle;
+	cfstok_get_agent(&arg.cgia_agent);
+	status = rcfscall(server, CFSD_PROC_GETINODE,
+			(xdrproc_t)xdr_cfsgetinoarg,
+			(caddr_t)&arg,
+			(xdrproc_t)xdr_cfsdiropres,
+			(caddr_t)&res);
+	if (!status)
+		status = res.cdr_status;
+	if (!status)
+		*ipp = __cfs_fhget(server->mi_sb, &res.cdr_cdrok, *ipp);
+	return status;
+}
+
+
 #ifdef CFS_REVALIDATE_GETATTR
+static int cfs_proc_getattr_remote(cfs_mntinfo_t *mip, struct inode *inode);
+
 static int
 cfs_proc_getattr(struct inode *inode)
 {
@@ -221,21 +236,7 @@
 		/* cfsd_getattr() */
 		cfs_update_attr(itoc(inode)->c_hp, inode, 0);
 	} else {
-		struct cfsgaargs args;
-		struct cfsattrstat res;
-
-		args.cgaa_fh = *itocfh(inode);
-		cfstok_get_agent(&args.cgaa_agent);
-
-		status = rcfscall(mip, CFSD_PROC_GETATTR,
-				(xdrproc_t)xdr_cfssaargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsattrstat,
-				(caddr_t)&res);
-		if (!status)
-	   		status = res.cns_status;
-		if (!status)
-			cfs_refresh_inode(inode, &(res.cns_attr));
+		status = cfs_proc_getattr_remote(mip, inode)
 	}
 
 sb_error_check:
@@ -246,8 +247,34 @@
 	dprintk("CFS reply getattr\n");
 	return status;
 }
+
+static int
+cfs_proc_getattr_remote(cfs_mntinfo_t *mip, struct inode *inode)
+{
+	int status;
+
+	struct cfsgaargs args;
+	struct cfsattrstat res;
+
+	args.cgaa_fh = *itocfh(inode);
+	cfstok_get_agent(&args.cgaa_agent);
+
+	status = rcfscall(mip, CFSD_PROC_GETATTR,
+			(xdrproc_t)xdr_cfssaargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsattrstat,
+			(caddr_t)&res);
+	if (!status)
+   		status = res.cns_status;
+	if (!status)
+		cfs_refresh_inode(inode, &(res.cns_attr));
+
+	return status;
+}
 #endif
 
+static int cfs_proc_setattr_remote(cfs_mntinfo_t *mip, struct inode *inode, struct iattr *attr);
+
 static int
 cfs_proc_setattr(struct inode *inode, struct iattr *attr)
 {
@@ -267,22 +294,7 @@
 		if (!status)
 			cfs_update_attr(itoc(inode)->c_hp, inode, 0);
 	} else {
-		struct cfssaargs args;
-		struct cfsattrstat res;
-
-		args.csaa_fh = *itocfh(inode);
-		args.csaa_sa = *attr;
-		cfstok_get_agent(&args.csaa_agent);
-
-		status = rcfscall(mip, CFSD_PROC_SETATTR,
-				(xdrproc_t)xdr_cfssaargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsattrstat,
-				(caddr_t)&res);
-		if (!status)
-	   		status = res.cns_status;
-		if (!status)
-			cfs_refresh_inode(inode, &(res.cns_attr));
+		status = cfs_proc_setattr_remote(mip, inode, attr);
 	}
 
 sb_error_check:
@@ -294,6 +306,32 @@
 	return status;
 }
 
+static int
+cfs_proc_setattr_remote(cfs_mntinfo_t *mip, struct inode *inode, struct iattr *attr)
+{
+	int status;
+
+	struct cfssaargs args;
+	struct cfsattrstat res;
+
+	args.csaa_fh = *itocfh(inode);
+	args.csaa_sa = *attr;
+	cfstok_get_agent(&args.csaa_agent);
+
+	status = rcfscall(mip, CFSD_PROC_SETATTR,
+			(xdrproc_t)xdr_cfssaargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsattrstat,
+			(caddr_t)&res);
+	if (!status)
+	  		status = res.cns_status;
+	if (!status)
+		cfs_refresh_inode(inode, &(res.cns_attr));
+	return status;
+}
+
+static int cfs_check_dir_remote(struct inode *dir, struct qstr *name);
+
 int
 cfs_check_dir(struct inode *dir, struct qstr *name)
 {
@@ -304,21 +342,7 @@
 	if (CFS_AT_SERVER(dir)) {
 		status = cfsd_check_dir(itoc(dir)->c_hp, name);
 	} else {
-		cfs_mntinfo_t *mip = itocmi(dir);
-		struct cfslookargs args;
-		int result;
-
-		args.clua_fhandle = *itocfh(dir);
-		args.clua_name = *name;
-		cfstok_get_agent(&args.clua_agent); /* notused */
-
-		status = rcfscall(mip, CFSD_PROC_CHECK_DIR,
-				(xdrproc_t)xdr_cfslookargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_int32_t,
-				(caddr_t)&result);
-		if (!status)
-			status = result;
+		status = cfs_check_dir_remote(dir, name);
 	}
 
 	dprintk("CFS reply check_dir: %d\n", status);
@@ -326,6 +350,32 @@
 }
 
 static int
+cfs_check_dir_remote(struct inode *dir, struct qstr *name)
+{
+	int status;
+
+	cfs_mntinfo_t *mip = itocmi(dir);
+	struct cfslookargs args;
+	int result;
+
+	args.clua_fhandle = *itocfh(dir);
+	args.clua_name = *name;
+	cfstok_get_agent(&args.clua_agent); /* notused */
+
+	status = rcfscall(mip, CFSD_PROC_CHECK_DIR,
+			(xdrproc_t)xdr_cfslookargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_int32_t,
+			(caddr_t)&result);
+	if (!status)
+		status = result;
+	return status;
+}
+
+static int cfs_proc_lookup_remote(cfs_mntinfo_t *mip,
+	 struct inode *dir, struct qstr *name, struct inode **ipp);
+
+static int
 cfs_proc_lookup(struct inode *dir, struct qstr *name, struct inode **ipp)
 {
 	int status;
@@ -351,24 +401,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfsdiropres res;
-		struct cfslookargs args;
-		struct cfs_nettok res_toks[CFS_NTOKS];
-
-		res.cdr_res_toks = res_toks;
-		args.clua_fhandle = *itocfh(dir);
-		args.clua_name = *name;
-		cfstok_get_agent(&args.clua_agent);
-
-		status = rcfscall(mip, CFSD_PROC_LOOKUP,
-				(xdrproc_t)xdr_cfslookargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsdiropres,
-				(caddr_t)&res);
-		if (!status)
-			status = res.cdr_status;
-		if (!status)
-			*ipp = cfs_fhget(dir->i_sb, &(res.cdr_cdrok));
+		status = cfs_proc_lookup_remote(mip, dir, name, ipp);
 	}
 sb_error_check:
 	if (CFS_SB_RETRY(mip, status))
@@ -380,6 +413,36 @@
 }
 
 static int
+cfs_proc_lookup_remote(cfs_mntinfo_t *mip,
+	 struct inode *dir, struct qstr *name, struct inode **ipp)
+{
+	int status;
+
+	struct cfsdiropres res;
+	struct cfslookargs args;
+	struct cfs_nettok res_toks[CFS_NTOKS];
+
+	res.cdr_res_toks = res_toks;
+	args.clua_fhandle = *itocfh(dir);
+	args.clua_name = *name;
+	cfstok_get_agent(&args.clua_agent);
+
+	status = rcfscall(mip, CFSD_PROC_LOOKUP,
+			(xdrproc_t)xdr_cfslookargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsdiropres,
+			(caddr_t)&res);
+	if (!status)
+		status = res.cdr_status;
+	if (!status)
+		*ipp = cfs_fhget(dir->i_sb, &(res.cdr_cdrok));
+	return status;
+}
+
+static int cfs_proc_readlink_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, void *buffer, unsigned int bufsiz);
+
+static int
 cfs_proc_readlink(struct inode *inode, void *buffer, unsigned int bufsiz)
 {
 	int			status;
@@ -403,27 +466,7 @@
 			cfs_update_attr(itoc(inode)->c_hp, inode, 0);
 		}
 	} else {
-		struct cfsrdlnres res;
-		struct cfsrdlnargs args;
-
-		res.crl_data = buffer;
-		args.crl_fh = *itocfh(inode);
-		cfstok_get_agent(&args.crl_agent);
-
-		status = rcfscall(mip, CFSD_PROC_READLINK,
-				(xdrproc_t)xdr_cfsrdlnargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsrdlnres,
-				(caddr_t)&res);
-
-		if (!status)
-			status = res.crl_status;
-		if (!status) {
-			/* Null terminate buffer */
-			((char *)buffer)[res.crl_count] = 0;
-
-			cfs_refresh_inode(inode, &(res.crl_attr));
-		}
+		status = cfs_proc_readlink_remote(mip, inode, buffer, bufsiz);
 	}
 sb_error_check:
 	if (CFS_SB_RETRY(mip, status))
@@ -434,9 +477,49 @@
 	return status;
 }
 
+static int
+cfs_proc_readlink_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, void *buffer, unsigned int bufsiz)
+{
+	int status;
+
+	struct cfsrdlnres res;
+	struct cfsrdlnargs args;
+
+	res.crl_data = buffer;
+	args.crl_fh = *itocfh(inode);
+	cfstok_get_agent(&args.crl_agent);
+
+	status = rcfscall(mip, CFSD_PROC_READLINK,
+			(xdrproc_t)xdr_cfsrdlnargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsrdlnres,
+			(caddr_t)&res);
+
+	if (!status)
+		status = res.crl_status;
+	if (!status) {
+		/* Null terminate buffer */
+		((char *)buffer)[res.crl_count] = 0;
+
+		cfs_refresh_inode(inode, &(res.crl_attr));
+	}
+	return status;
+}
+
 /* The async arg is used to inform this routine it is being called from
  * an async handler process.  It should not hang on a down hard mount.
  */
+#ifdef CFS_PAGEVEC
+static int cfs_proc_read_remote (cfs_mntinfo_t *mip, struct inode *inode,
+				 struct cfs_read_data *data, 
+				 struct kvec *kvec, int vlen);
+#else
+static int cfs_proc_read_remote (cfs_mntinfo_t *mip, 
+		struct inode *inode, loff_t offset, unsigned int count,
+                void *buffer);
+#endif
+
 static int
 #ifdef CFS_PAGEVEC
 cfs_proc_read(struct cfs_read_data *data)
@@ -496,59 +579,90 @@
 #endif
 		}
 	} else {
-		struct cfsreadargs args;
-		struct cfsrdresults *res_p = NULL;
-		int rval;
 #ifdef CFS_PAGEVEC
-		unsigned long mycount = data->count;
+		status = cfs_proc_read_remote (mip, inode, data, kvec, vlen);
 #else
-		int mycount = count;
+		status = cfs_proc_read_remote (mip, inode, offset, count, buffer)
 #endif
+	}
 
-		args.cra_fhandle = *itocfh(inode);
 #ifdef CFS_PAGEVEC
-		args.cra_offset = data->offset;
-		args.cra_pgbase = data->pgbase;
+	CFS_PAGEVEC_UNMAP(data, kvec);
+#endif
+sb_error_check:
+	if (async ? CFS_SB_RETRY_NOHANG(mip, status):CFS_SB_RETRY(mip, status))
+		goto sb_down_retry;
+	CFS_SB_FSOP_DONE(mip);
 
-		status = RCFS_READ(mip->mi_server,&rval,
-				   &args, &res_p, &mycount, &kvec, &vlen);
+	dprintk("CFS reply read: %d\n", status);
+	return status;
+}
+
+static int 
+#ifdef CFS_PAGEVEC
+cfs_proc_read_remote (cfs_mntinfo_t *mip, struct inode *inode, 
+		struct cfs_read_data *data, struct kvec *kvec, int vlen)
 #else
-		args.cra_offset = offset;
+cfs_proc_read_remote (cfs_mntinfo_t *mip, struct inode *inode,
+		loff_t offset, unsigned int count,
+                void *buffer)
+#endif
+{
+	int status;
 
-		status = RCFS_READ(mip->mi_server,&rval,
-				   &args, &res_p, (char **)&buffer,&mycount);
+	struct cfsreadargs args;
+	struct cfsrdresults *res_p = NULL;
+	int rval;
+#ifdef CFS_PAGEVEC
+	unsigned long mycount = data->count;
+#else
+	int mycount = count;
 #endif
 
-		if (status != 0 || rval != 0)
-			status = -ETIMEDOUT;
-		if (status == 0) {
-			status = res_p->crr_status;
-			if (status == 0) {
+	args.cra_fhandle = *itocfh(inode);
 #ifdef CFS_PAGEVEC
-				data->res_count = mycount;
+	args.cra_offset = data->offset;
+	args.cra_pgbase = data->pgbase;
+
+	status = RCFS_READ(mip->mi_server,&rval,
+			   &args, &res_p, &mycount, &kvec, &vlen);
+#else
+	args.cra_offset = offset;
+
+	status = RCFS_READ(mip->mi_server,&rval,
+			   &args, &res_p, (char **)&buffer,&mycount);
 #endif
-				status = (ssize_t)mycount;
-				cfs_refresh_inode(inode, &(res_p->crr_attr));
-			}
-			(void) xdr_free(xdr_cfsrdresults_p, &res_p);
-		}
-	}
 
+	if (status != 0 || rval != 0)
+		status = -ETIMEDOUT;
+	if (status == 0) {
+		status = res_p->crr_status;
+		if (status == 0) {
 #ifdef CFS_PAGEVEC
-	CFS_PAGEVEC_UNMAP(data, kvec);
+			data->res_count = mycount;
 #endif
-sb_error_check:
-	if (async ? CFS_SB_RETRY_NOHANG(mip, status):CFS_SB_RETRY(mip, status))
-		goto sb_down_retry;
-	CFS_SB_FSOP_DONE(mip);
+			status = (ssize_t)mycount;
+			cfs_refresh_inode(inode, &(res_p->crr_attr));
+		}
+		(void) xdr_free(xdr_cfsrdresults_p, &res_p);
+	}
 
-	dprintk("CFS reply read: %d\n", status);
 	return status;
 }
 
 /* The async arg is used to inform this routine it is being called from
  * an async handler process.  It should not hang on a down hard mount.
  */
+#ifdef CFS_PAGEVEC
+static int cfs_proc_write_remote(cfs_mntinfo_t *mip, struct inode *inode,
+		struct cfs_write_data *data,
+		struct kvec *kvec, int vlen);
+#else
+static int cfs_proc_write_remote(cfs_mntinfo_t *mip,
+		struct inode *inode, loff_t offset, unsigned int count,
+		void *buffer, int stable);
+#endif
+
 static int
 #ifdef CFS_PAGEVEC
 cfs_proc_write(struct cfs_write_data *data)
@@ -602,30 +716,11 @@
 #endif
 		}
 	} else {
-		struct cfswriteargs args;
-		struct cfswriteres *res_p = NULL;
-		int rval;
-
-		args.cwa_fhandle = *itocfh(inode);
-#ifdef CFS_PAGEVEC
-		args.cwa_offset = data->offset;
-		args.cwa_stable = data->stable;
-		status = RCFS_WRITE(mip->mi_server, &rval, &args, &res_p,
-				    (unsigned long)data->count, &kvec, vlen);
-#else
-		args.cwa_offset = offset;
-		args.cwa_stable = stable;
-		status = RCFS_WRITE(mip->mi_server, &rval, &args, &res_p,
-				    buffer, count);
+#ifdef CFS_PAGEVEC
+		status = cfs_proc_write_remote(mip, inode, data, kvec, vlen);
+#else
+		status = cfs_proc_write_remote(mip, inode, offset, count, buffer, stable);
 #endif
-		if (status != 0 || rval != 0)
-			status = -ETIMEDOUT;
-		if (status == 0) {
-			status = res_p->cwr_status;
-			if (status == 0)
-				cfs_refresh_inode(inode, &res_p->cwr_attr);
-			(void) xdr_free(xdr_cfswriteres_p, &res_p);
-		}
 	}
 
 #ifdef CFS_PAGEVEC
@@ -645,6 +740,51 @@
 }
 
 static int
+#ifdef CFS_PAGEVEC
+cfs_proc_write_remote(cfs_mntinfo_t *mip, struct inode *inode,
+		struct cfs_write_data *data,
+		struct kvec *kvec, int vlen)
+#else
+cfs_proc_write_remote(cfs_mntinfo_t *mip,
+		struct inode *inode, loff_t offset, unsigned int count,
+		void *buffer, int stable)
+#endif
+{
+	int status;
+
+	struct cfswriteargs args;
+	struct cfswriteres *res_p = NULL;
+	int rval;
+
+	args.cwa_fhandle = *itocfh(inode);
+#ifdef CFS_PAGEVEC
+	args.cwa_offset = data->offset;
+	args.cwa_stable = data->stable;
+	status = RCFS_WRITE(mip->mi_server, &rval, &args, &res_p,
+			    (unsigned long)data->count, &kvec, vlen);
+#else
+	args.cwa_offset = offset;
+	args.cwa_stable = stable;
+	status = RCFS_WRITE(mip->mi_server, &rval, &args, &res_p,
+			    buffer, count);
+#endif
+	if (status != 0 || rval != 0)
+		status = -ETIMEDOUT;
+	if (status == 0) {
+		status = res_p->cwr_status;
+		if (status == 0)
+			cfs_refresh_inode(inode, &res_p->cwr_attr);
+		(void) xdr_free(xdr_cfswriteres_p, &res_p);
+	}
+
+	return status;
+}
+
+static int cfs_proc_create_remote(cfs_mntinfo_t *mip,
+		struct inode *dir, struct qstr *name, int mode,
+		int flags, struct inode **ipp);
+
+static int
 cfs_proc_create(struct inode *dir, struct qstr *name, int mode,
 		int flags, struct inode **ipp)
 {
@@ -696,33 +836,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfscreatres res;
-		struct cfs_nettok res_toks[CFS_NTOKS];
-		struct cfscreatargs args;
-
-		res.ccr_res_toks = res_toks;
-		args.cca_fhandle = *itocfh(dir);
-		args.cca_name = *name;
-		args.cca_mode = mode;
-		args.cca_type = S_IFREG;
-		args.cca_dev = 0;
-		args.cca_flags = flags;
-		args.fsuid = current->fsuid;
-		args.fsgid = current->fsgid;
-		cfstok_get_agent(&args.cca_agent);
-		status = rcfscall(mip, CFSD_PROC_CREATE,
-				(xdrproc_t)xdr_cfscreatargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfscreatres,
-				(caddr_t)&res);
-		if (!status) {
-			status = res.ccr_status;
-		}
-		if (!status) {
-			cfs_refresh_inode(dir, &(res.ccr_dirattr));
-
-			*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
-		}
+		status = cfs_proc_create_remote(mip, dir, name, mode, flags, ipp);
 	}
 
 	/* We pre-checked that the file didn't exist, This must have
@@ -742,6 +856,47 @@
 }
 
 static int
+cfs_proc_create_remote(cfs_mntinfo_t *mip,
+		struct inode *dir, struct qstr *name, int mode,
+		int flags, struct inode **ipp)
+{
+	int status;
+
+	struct cfscreatres res;
+	struct cfs_nettok res_toks[CFS_NTOKS];
+	struct cfscreatargs args;
+
+	res.ccr_res_toks = res_toks;
+	args.cca_fhandle = *itocfh(dir);
+	args.cca_name = *name;
+	args.cca_mode = mode;
+	args.cca_type = S_IFREG;
+	args.cca_dev = 0;
+	args.cca_flags = flags;
+	args.fsuid = current->fsuid;
+	args.fsgid = current->fsgid;
+	cfstok_get_agent(&args.cca_agent);
+	status = rcfscall(mip, CFSD_PROC_CREATE,
+			(xdrproc_t)xdr_cfscreatargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfscreatres,
+			(caddr_t)&res);
+	if (!status) {
+		status = res.ccr_status;
+	}
+	if (!status) {
+		cfs_refresh_inode(dir, &(res.ccr_dirattr));
+
+		*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
+	}
+
+	return status;
+}
+
+static int cfs_proc_remove_remote(cfs_mntinfo_t *mip,
+	struct inode *dir, struct qstr *name, struct inode *ip);
+
+static int
 cfs_proc_remove(struct inode *dir, struct qstr *name, struct inode *ip)
 {
 	int			status;
@@ -767,24 +922,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfsrmres res;
-		struct cfsunlinkargs args;
-
-		args.crma_fhandle = *itocfh(dir);
-		args.crma_qstr = *name;
-
-		status = rcfscall(mip, CFSD_PROC_UNLINK,
-				(xdrproc_t)xdr_cfsunlinkargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsrmres,
-				(caddr_t)&res);
-
-		if (!status)
-			status = res.crms_status;
-		if (!status) {
-			cfs_refresh_inode(dir, &(res.crms_dirattr));
-			cfs_refresh_inode(ip, &(res.crms_attr));
-		}
+		status = cfs_proc_remove_remote(mip, dir, name, ip);
 	}
 
 	/* Ignore error due to retransmitted failover request */
@@ -802,6 +940,38 @@
 }
 
 static int
+cfs_proc_remove_remote(cfs_mntinfo_t *mip,
+	struct inode *dir, struct qstr *name, struct inode *ip)
+{
+	int status;
+
+	struct cfsrmres res;
+	struct cfsunlinkargs args;
+
+	args.crma_fhandle = *itocfh(dir);
+	args.crma_qstr = *name;
+
+	status = rcfscall(mip, CFSD_PROC_UNLINK,
+			(xdrproc_t)xdr_cfsunlinkargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsrmres,
+			(caddr_t)&res);
+
+	if (!status)
+		status = res.crms_status;
+	if (!status) {
+		cfs_refresh_inode(dir, &(res.crms_dirattr));
+		cfs_refresh_inode(ip, &(res.crms_attr));
+	}
+
+	return status;
+}
+
+static int cfs_proc_rename_remote(cfs_mntinfo_t *mip,
+		struct inode *old_dir, struct qstr *old_name, struct inode *oip,
+		struct inode *new_dir, struct qstr *new_name, struct inode *nip);
+
+static int
 cfs_proc_rename(struct inode *old_dir, struct qstr *old_name, struct inode *oip,
 		struct inode *new_dir, struct qstr *new_name, struct inode *nip)
 {
@@ -839,32 +1009,12 @@
 				HASH_RELE(nhp);
 		}
 	} else {
-		struct cfsrnmres res;
-		struct cfsrnmargs args;
-
-		args.crna_from.cda_fhandle = *itocfh(old_dir);
-		args.crna_from.cda_name = *old_name;
-		args.crna_to.cda_fhandle = *itocfh(new_dir);
-		args.crna_to.cda_name = *new_name;
-		cfstok_get_agent(&args.crna_agent);
-
-		status = rcfscall(mip, CFSD_PROC_RENAME,
-				(xdrproc_t)xdr_cfsrnmargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsrnmres,
-				(caddr_t)&res);
+		/* Handle remote case in another proc so it's large
+		   stack usage doesn't eat up space for local case */
 
-		if (!status) {
-			status = res.crnmr_status;
-		}
-		if (!status) {
-			cfs_refresh_inode(old_dir, &res.crnmr_odirattr);
-			if (new_dir != old_dir)
-				cfs_refresh_inode(new_dir, &res.crnmr_ndirattr);
-			cfs_refresh_inode(oip, &res.crnmr_oattr);
-			if (nip)
-				cfs_refresh_inode(nip, &res.crnmr_nattr);
-		}
+		status = cfs_proc_rename_remote(mip, 
+				old_dir, old_name, oip,
+				new_dir, new_name, nip);
 	}
 
 	/* Ignore error, get inode due to retransmitted failover request */
@@ -881,6 +1031,51 @@
 	return status;
 }
 
+/*
+ * Break out the remote path from cfs_proc_rename so we reduce stack
+ * usage on the local path.  Ugly.  JH
+ *
+ */
+
+static int
+cfs_proc_rename_remote(cfs_mntinfo_t *mip,
+		struct inode *old_dir, struct qstr *old_name, struct inode *oip,
+		struct inode *new_dir, struct qstr *new_name, struct inode *nip)
+{
+	int status;
+
+	struct cfsrnmres res;
+	struct cfsrnmargs args;
+
+	args.crna_from.cda_fhandle = *itocfh(old_dir);
+	args.crna_from.cda_name = *old_name;
+	args.crna_to.cda_fhandle = *itocfh(new_dir);
+	args.crna_to.cda_name = *new_name;
+	cfstok_get_agent(&args.crna_agent);
+
+	status = rcfscall(mip, CFSD_PROC_RENAME,
+			(xdrproc_t)xdr_cfsrnmargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsrnmres,
+			(caddr_t)&res);
+
+	if (!status) {
+		status = res.crnmr_status;
+	}
+	if (!status) {
+		cfs_refresh_inode(old_dir, &res.crnmr_odirattr);
+		if (new_dir != old_dir)
+			cfs_refresh_inode(new_dir, &res.crnmr_ndirattr);
+		cfs_refresh_inode(oip, &res.crnmr_oattr);
+		if (nip)
+			cfs_refresh_inode(nip, &res.crnmr_nattr);
+	}
+	return status;
+}
+
+static int cfs_proc_link_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, struct inode *dir, struct qstr *name);
+
 static int
 cfs_proc_link(struct inode *inode, struct inode *dir, struct qstr *name)
 {
@@ -924,28 +1119,7 @@
 			cfs_update_attr(itoc(inode)->c_hp, inode, 0);
 		}
 	} else {
-		struct cfsrmres res;
-		struct cfslinkargs args;
-
-		args.cla_from = *itocfh(inode);
-		args.cla_to.cda_fhandle = *itocfh(dir);
-		args.cla_to.cda_name = *name;
-		args.fsuid = current->fsuid;
-		args.fsgid = current->fsgid;
-		cfstok_get_agent(&args.cla_agent);
-
-		status = rcfscall(mip, CFSD_PROC_LINK,
-				(xdrproc_t)xdr_cfslinkargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsrmres,
-				(caddr_t)&res);
-
-		if (!status)
-			status = res.crms_status;
-		if (!status) {
-			cfs_refresh_inode(dir, &(res.crms_dirattr));
-			cfs_refresh_inode(inode, &(res.crms_attr));
-		}
+		status = cfs_proc_link_remote(mip, inode, dir, name);
 	}
 
 	/* Ignore this error due to retransmitted failover request */
@@ -963,6 +1137,40 @@
 }
 
 static int
+cfs_proc_link_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, struct inode *dir, struct qstr *name)
+{
+	int status;
+
+	struct cfsrmres res;
+	struct cfslinkargs args;
+
+	args.cla_from = *itocfh(inode);
+	args.cla_to.cda_fhandle = *itocfh(dir);
+	args.cla_to.cda_name = *name;
+	args.fsuid = current->fsuid;
+	args.fsgid = current->fsgid;
+	cfstok_get_agent(&args.cla_agent);
+
+	status = rcfscall(mip, CFSD_PROC_LINK,
+			(xdrproc_t)xdr_cfslinkargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsrmres,
+			(caddr_t)&res);
+
+	if (!status)
+		status = res.crms_status;
+	if (!status) {
+		cfs_refresh_inode(dir, &(res.crms_dirattr));
+		cfs_refresh_inode(inode, &(res.crms_attr));
+	}
+	return status;
+}
+
+static int cfs_proc_symlink_remote(cfs_mntinfo_t *mip,
+	struct inode *dir, struct qstr *name, const char *path,
+			struct inode **ipp);
+static int
 cfs_proc_symlink(struct inode *dir, struct qstr *name, const char *path,
 			struct inode **ipp)
 {
@@ -1016,33 +1224,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfscreatres res;
-		struct cfs_nettok res_toks[CFS_NTOKS];
-		struct cfsslargs args;
-
-		res.ccr_res_toks = res_toks;
-		args.csla_from.cda_fhandle = *itocfh(dir);
-		args.csla_from.cda_name = *name;
-		args.csla_tnm = (char *)path;
-		args.fsuid = current->fsuid;
-		args.fsgid = current->fsgid;
-		cfstok_get_agent(&args.csla_agent);
-
-		status = rcfscall(mip, CFSD_PROC_SYMLINK,
-				(xdrproc_t)xdr_cfsslargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfscreatres,
-				(caddr_t)&res);
-
-		if (!status) {
-			status = res.ccr_status;
-			if (!status) {
-				/* Load attributes from server for dir */
-				cfs_refresh_inode(dir, &(res.ccr_dirattr));
-
-				*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
-			}
-		}
+		status = cfs_proc_symlink_remote(mip, dir, name, path, ipp);
 	}
 	/* Ignore error, get inode due to retransmitted failover request */
 	if (status == -EEXIST && CFS_SB_HARD_MIP(itocmi(dir)) &&
@@ -1061,6 +1243,48 @@
 }
 
 static int
+cfs_proc_symlink_remote(cfs_mntinfo_t *mip,
+			struct inode *dir, struct qstr *name, const char *path,
+			struct inode **ipp)
+{
+	int status;
+
+	struct cfscreatres res;
+	struct cfs_nettok res_toks[CFS_NTOKS];
+	struct cfsslargs args;
+
+	res.ccr_res_toks = res_toks;
+	args.csla_from.cda_fhandle = *itocfh(dir);
+	args.csla_from.cda_name = *name;
+	args.csla_tnm = (char *)path;
+	args.fsuid = current->fsuid;
+	args.fsgid = current->fsgid;
+	cfstok_get_agent(&args.csla_agent);
+
+	status = rcfscall(mip, CFSD_PROC_SYMLINK,
+			(xdrproc_t)xdr_cfsslargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfscreatres,
+			(caddr_t)&res);
+
+	if (!status) {
+		status = res.ccr_status;
+		if (!status) {
+			/* Load attributes from server for dir */
+			cfs_refresh_inode(dir, &(res.ccr_dirattr));
+
+			*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
+		}
+	}
+
+	return status;
+}
+
+static int cfs_proc_mkdir_remote(cfs_mntinfo_t *mip,
+		struct inode *dir, struct qstr *name, int mode,
+	       struct inode **ipp);
+
+static int
 cfs_proc_mkdir(struct inode *dir, struct qstr *name, int mode,
 	       struct inode **ipp)
 {
@@ -1115,34 +1339,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfscreatres res;
-		struct cfscreatargs args;
-		struct cfs_nettok res_toks[CFS_NTOKS];
-
-		res.ccr_res_toks = res_toks;
-		args.cca_fhandle = *itocfh(dir);
-		args.cca_name = *name;
-		args.cca_mode = mode;
-		args.cca_type = S_IFDIR;
-		args.cca_dev = 0;
-		args.fsuid = current->fsuid;
-		args.fsgid = current->fsgid;
-		cfstok_get_agent(&args.cca_agent);
-
-		status = rcfscall(mip, CFSD_PROC_MKDIR,
-				(xdrproc_t)xdr_cfscreatargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfscreatres,
-				(caddr_t)&res);
-		if (status == 0) {
-			status = res.ccr_status;
-			if (status == 0) {
-				/* Load attributes from server for dir */
-				cfs_refresh_inode(dir, &(res.ccr_dirattr));
-
-				*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
-			}
-		}
+		status = cfs_proc_mkdir_remote(mip, dir, name, mode, ipp);
 	}
 
 	/* Ignore error, get inode due to retransmitted failover request */
@@ -1162,6 +1359,48 @@
 }
 
 static int
+cfs_proc_mkdir_remote(cfs_mntinfo_t *mip,
+		struct inode *dir, struct qstr *name, int mode,
+		struct inode **ipp)
+{
+	int status;
+
+	struct cfscreatres res;
+	struct cfscreatargs args;
+	struct cfs_nettok res_toks[CFS_NTOKS];
+
+	res.ccr_res_toks = res_toks;
+	args.cca_fhandle = *itocfh(dir);
+	args.cca_name = *name;
+	args.cca_mode = mode;
+	args.cca_type = S_IFDIR;
+	args.cca_dev = 0;
+	args.fsuid = current->fsuid;
+	args.fsgid = current->fsgid;
+	cfstok_get_agent(&args.cca_agent);
+
+	status = rcfscall(mip, CFSD_PROC_MKDIR,
+			(xdrproc_t)xdr_cfscreatargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfscreatres,
+			(caddr_t)&res);
+	if (status == 0) {
+		status = res.ccr_status;
+		if (status == 0) {
+			/* Load attributes from server for dir */
+			cfs_refresh_inode(dir, &(res.ccr_dirattr));
+
+			*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
+		}
+	}
+
+	return status;
+}
+
+static int cfs_proc_rmdir_remote(cfs_mntinfo_t *mip, 
+	struct inode *dir, struct qstr *name, struct inode *ip);
+
+static int
 cfs_proc_rmdir(struct inode *dir, struct qstr *name, struct inode *ip)
 {
 	int status;
@@ -1187,23 +1426,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfsrmdrargs args;
-		struct cfsrmres res;
-
-		args.crmda_fhandle = *itocfh(dir);
-		args.crmda_name = *name;
-
-		status = rcfscall(mip, CFSD_PROC_RMDIR,
-				(xdrproc_t)xdr_cfsrmdrargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsrmres,
-				(caddr_t)&res);
-		if (!status)
-			status = res.crms_status;
-		if (!status) {
-			cfs_refresh_inode(dir, &(res.crms_dirattr));
-			cfs_refresh_inode(ip, &(res.crms_attr));
-		}
+		status = cfs_proc_rmdir_remote(mip, dir, name, ip);
 	}
 	/* Ignore error due to retransmitted failover request */
 	if (status == -ENOENT && CFS_SB_HARD_MIP(itocmi(dir)) &&
@@ -1220,6 +1443,33 @@
 }
 
 static int
+cfs_proc_rmdir_remote(cfs_mntinfo_t *mip, 
+	struct inode *dir, struct qstr *name, struct inode *ip)
+{
+	int status;
+
+	struct cfsrmdrargs args;
+	struct cfsrmres res;
+
+	args.crmda_fhandle = *itocfh(dir);
+	args.crmda_name = *name;
+
+	status = rcfscall(mip, CFSD_PROC_RMDIR,
+			(xdrproc_t)xdr_cfsrmdrargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsrmres,
+			(caddr_t)&res);
+	if (!status)
+		status = res.crms_status;
+	if (!status) {
+		cfs_refresh_inode(dir, &(res.crms_dirattr));
+		cfs_refresh_inode(ip, &(res.crms_attr));
+	}
+
+	return status;
+}
+
+static int
 cfs_proc_readdir(struct inode *dir,
 		 __u32 cookie, void *entry,
 		 unsigned int size)
@@ -1258,6 +1508,10 @@
 	return status;
 }
 
+static int cfs_proc_mknod_remote(cfs_mntinfo_t *mip,
+		struct inode *dir, struct qstr *name, int mode,
+	       dev_t rdev, struct inode **ipp);
+
 static int
 cfs_proc_mknod(struct inode *dir, struct qstr *name, int mode,
 	       dev_t rdev, struct inode **ipp)
@@ -1315,32 +1569,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfscreatres res;
-		struct cfscreatargs args;
-		struct cfs_nettok res_toks[CFS_NTOKS];
-
-		res.ccr_res_toks = res_toks;
-		args.cca_fhandle = *itocfh(dir);
-		args.cca_name = *name;
-		args.cca_mode = mode;
-		args.cca_type = type;
-		args.cca_dev = rdev;
-		args.fsuid = current->fsuid;
-		args.fsgid = current->fsgid;
-		cfstok_get_agent(&args.cca_agent);
-		status = rcfscall(mip, CFSD_PROC_MKDIR,
-				(xdrproc_t)xdr_cfscreatargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfscreatres,
-				(caddr_t)&res);
-		if (!status)
-			status = res.ccr_status;
-		if (!status) {
-			/* Load attributes from server for dir */
-			cfs_refresh_inode(dir, &(res.ccr_dirattr));
-
-			*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
-		}
+		status = cfs_proc_mknod_remote(mip, dir, name, mode, rdev, ipp);
 	}
 
 	/* Ignore error, get inode due to retransmitted failover request */
@@ -1360,6 +1589,46 @@
 }
 
 static int
+cfs_proc_mknod_remote(cfs_mntinfo_t *mip,
+		struct inode *dir, struct qstr *name, int mode,
+		dev_t rdev, struct inode **ipp)
+{
+	int status;
+
+	int type = mode & S_IFMT;
+	struct cfscreatres res;
+	struct cfscreatargs args;
+	struct cfs_nettok res_toks[CFS_NTOKS];
+
+	res.ccr_res_toks = res_toks;
+	args.cca_fhandle = *itocfh(dir);
+	args.cca_name = *name;
+	args.cca_mode = mode;
+	args.cca_type = type;
+	args.cca_dev = rdev;
+	args.fsuid = current->fsuid;
+	args.fsgid = current->fsgid;
+	cfstok_get_agent(&args.cca_agent);
+	status = rcfscall(mip, CFSD_PROC_MKDIR,
+			(xdrproc_t)xdr_cfscreatargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfscreatres,
+			(caddr_t)&res);
+	if (!status)
+		status = res.ccr_status;
+	if (!status) {
+		/* Load attributes from server for dir */
+		cfs_refresh_inode(dir, &(res.ccr_dirattr));
+
+		*ipp = cfs_fhget(dir->i_sb, &(res.ccr_ok));
+	}
+
+	return status;
+}
+
+static int cfs_proc_statfs_remote(struct cfs_server *server, struct kstatfs *info);
+
+static int
 cfs_proc_statfs(struct cfs_server *server, struct kstatfs *info)
 {
 	int	status;
@@ -1376,17 +1645,7 @@
 	if (CFS_AT_SERVER_MIP(server)) {
 		status = cfsd_statfs(server->mi_sb, info);
 	} else {
-		struct cfsstatfs res;
-
-		status = rcfscall(server, CFSD_PROC_STATFS,
-				(xdrproc_t)xdr_cfhandle_t,
-		(caddr_t)&(itoc(server->mi_sb->s_root->d_inode)->c_fh),
-				(xdrproc_t) xdr_cfsstatfs,
-				(caddr_t)&res);
-		if (!status)
-			status = res.csfs_status;
-		if (!status)
-			*info = res.csfs_statfs;
+		status = cfs_proc_statfs_remote(server, info);
 	}
 
 sb_error_check:
@@ -1398,6 +1657,25 @@
 	return status;
 }
 
+static int
+cfs_proc_statfs_remote(struct cfs_server *server, struct kstatfs *info)
+{
+	int status;
+
+	struct cfsstatfs res;
+
+	status = rcfscall(server, CFSD_PROC_STATFS,
+			(xdrproc_t)xdr_cfhandle_t,
+	(caddr_t)&(itoc(server->mi_sb->s_root->d_inode)->c_fh),
+			(xdrproc_t) xdr_cfsstatfs,
+			(caddr_t)&res);
+	if (!status)
+		status = res.csfs_status;
+	if (!status)
+		*info = res.csfs_statfs;
+	return status;
+}
+
 #define QUADLEN(l)		(((l) + 3) >> 2)
 
 u32 *
@@ -1425,6 +1703,9 @@
 	return p;
 }
 
+static int cfs_proc_revalidate_remote(cfs_mntinfo_t *mip,
+	struct inode *dir, struct qstr *name, unsigned long *inump);
+
 static int
 cfs_proc_revalidate(struct inode *dir, struct qstr *name, unsigned long *inump)
 {
@@ -1449,21 +1730,7 @@
 			HASH_RELE(hp);
 		}
 	} else {
-		struct cfsdiropargs args;
-		struct cfsrevres res;
-
-		args.cda_fhandle = *itocfh(dir);
-		args.cda_name = *name;
-
-		status = rcfscall(mip, CFSD_PROC_REVALIDATE,
-				(xdrproc_t)xdr_cfsdiropargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfsrevres,
-				(caddr_t)&res);
-		if (!status)
-			status = res.rvr_status;
-		if (!status)
-			*inump = res.rvr_inum;
+		status = cfs_proc_revalidate_remote(mip, dir, name, inump);
 	}
 sb_error_check:
 	if (CFS_SB_RETRY(mip, status))
@@ -1474,9 +1741,42 @@
 	return status;
 }
 
+static int
+cfs_proc_revalidate_remote(cfs_mntinfo_t *mip,
+	struct inode *dir, struct qstr *name, unsigned long *inump)
+{
+	int status;
+
+	struct cfsdiropargs args;
+	struct cfsrevres res;
+
+	args.cda_fhandle = *itocfh(dir);
+	args.cda_name = *name;
+
+	status = rcfscall(mip, CFSD_PROC_REVALIDATE,
+			(xdrproc_t)xdr_cfsdiropargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfsrevres,
+			(caddr_t)&res);
+	if (!status)
+		status = res.rvr_status;
+	if (!status)
+		*inump = res.rvr_inum;
+	return status;
+}
+
 /* The async arg is used to inform this routine it is being called from
  * an async handler process.  It should not hang on a down hard mount.
  */
+
+#ifdef CFS_PAGEVEC
+static int cfs_proc_commit_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, struct cfs_write_data *data);
+#else
+static int cfs_proc_commit_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, loff_t offset, unsigned int count);
+#endif
+
 static int
 #ifdef CFS_PAGEVEC
 cfs_proc_commit(struct cfs_write_data *data)
@@ -1514,28 +1814,11 @@
 		cfs_update_attr(itoc(inode)->c_hp, inode, 1);
 		status = 0;
 	} else {
-		struct cfscommitargs args;
-		struct cfscommitres res;
-
-		args.coma_fhandle = *itocfh(inode);
 #ifdef CFS_PAGEVEC
-		args.coma_offset = data->offset;
-		args.coma_count = data->count;
+		status = cfs_proc_commit_remote(mip, inode, data);
 #else
-		args.coma_offset = offset;
-		args.coma_count = count;
+		status = cfs_proc_commit_remote(mip, inode, offset, count);
 #endif
-
-		status = rcfscall(mip, CFSD_PROC_COMMIT,
-				(xdrproc_t)xdr_cfscommitargs,
-				(caddr_t)&args,
-				(xdrproc_t)xdr_cfscommitres,
-				(caddr_t)&res);
-		if (status == 0) {
-			status = res.comr_status;
-			if (status == 0)
-				cfs_refresh_inode(inode, &res.comr_attr);
-		}
 	}
 
 sb_error_check:
@@ -1551,6 +1834,43 @@
 #endif
 }
 
+static int
+#ifdef CFS_PAGEVEC
+cfs_proc_commit_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, struct cfs_write_data *data)
+#else
+cfs_proc_commit_remote(cfs_mntinfo_t *mip,
+	struct inode *inode, loff_t offset, unsigned int count)
+#endif
+{
+	int status;
+
+	struct cfscommitargs args;
+	struct cfscommitres res;
+
+	args.coma_fhandle = *itocfh(inode);
+#ifdef CFS_PAGEVEC
+	args.coma_offset = data->offset;
+	args.coma_count = data->count;
+#else
+	args.coma_offset = offset;
+	args.coma_count = count;
+#endif
+
+	status = rcfscall(mip, CFSD_PROC_COMMIT,
+			(xdrproc_t)xdr_cfscommitargs,
+			(caddr_t)&args,
+			(xdrproc_t)xdr_cfscommitres,
+			(caddr_t)&res);
+	if (status == 0) {
+		status = res.comr_status;
+		if (status == 0)
+			cfs_refresh_inode(inode, &res.comr_attr);
+	}
+
+	return status;
+}
+
 struct cfs_rpc_ops     cfs_clientops = {
 	.getinode	= cfs_proc_getinode,
 #ifdef CFS_REVALIDATE_GETATTR
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.