Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 23 Jan 2012 04:38:31 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r230474 - in projects/nfsv4.1-client/sys/fs: nfs nfsclient
Message-ID:  <201201230438.q0N4cVpo007458@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Mon Jan 23 04:38:31 2012
New Revision: 230474
URL: http://svn.freebsd.org/changeset/base/230474

Log:
  Add functions that free up the layout, file layout and devinfo structures.

Modified:
  projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
  projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c

Modified: projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Sun Jan 22 21:26:30 2012	(r230473)
+++ projects/nfsv4.1-client/sys/fs/nfs/nfs_var.h	Mon Jan 23 04:38:31 2012	(r230474)
@@ -522,6 +522,9 @@ struct nfscllayout *nfscl_getlayout(stru
 void nfscl_rellayout(struct nfscllayout *);
 void nfscl_reldevinfo(struct nfscldevinfo *);
 void nfscl_adddevinfo(struct nfsmount *, struct nfscldevinfo *);
+void nfscl_freelayout(struct nfscllayout *);
+void nfscl_freeflayout(struct nfsclflayout *);
+void nfscl_freedevinfo(struct nfscldevinfo *);
 
 /* nfs_clport.c */
 int nfscl_nget(mount_t, vnode_t, struct nfsfh *,

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Sun Jan 22 21:26:30 2012	(r230473)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clrpcops.c	Mon Jan 23 04:38:31 2012	(r230474)
@@ -4610,11 +4610,8 @@ printf("layg iom=%d\n", iomode);
 	if (nd->nd_repstat != 0 && error == 0)
 		error = nd->nd_repstat;
 nfsmout:
-	if (error != 0 && flp != NULL) {
-		for (i = 0; i < flp->nfsfl_fhcnt; i++)
-			free(flp->nfsfl_fh[i], M_NFSFH);
-		free(flp, M_NFSFLAYOUT);
-	}
+	if (error != 0 && flp != NULL)
+		nfscl_freeflayout(flp);
 	mbuf_freem(nd->nd_mrep);
 	return (error);
 }
@@ -4765,17 +4762,8 @@ nfsrpc_getdeviceinfo(struct nfsmount *nm
 	if (nd->nd_repstat != 0)
 		error = nd->nd_repstat;
 nfsmout:
-	if (error != 0 && ndi != NULL) {
-		for (i = 0; i < ndi->nfsdi_addrcnt; i++) {
-			sa = nfsfldi_addr(ndi, i);
-			if (sa->nfsclds_sock.nr_nam != NULL) {
-				/* Both are set or both are NULL. */
-				NFSFREECRED(sa->nfsclds_sock.nr_cred);
-				free(sa->nfsclds_sock.nr_nam, M_SONAME);
-			}
-		}
-		free(ndi, M_NFSDEVINFO);
-	}
+	if (error != 0 && ndi != NULL)
+		nfscl_freedevinfo(ndi);
 	mbuf_freem(nd->nd_mrep);
 	return (error);
 }

Modified: projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c
==============================================================================
--- projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c	Sun Jan 22 21:26:30 2012	(r230473)
+++ projects/nfsv4.1-client/sys/fs/nfsclient/nfs_clstate.c	Mon Jan 23 04:38:31 2012	(r230474)
@@ -4583,3 +4583,51 @@ nfscl_adddevinfo(struct nfsmount *nmp, s
 	NFSUNLOCKCLSTATE();
 }
 
+/*
+ * Free up a layout structure and associated file layout structure(s).
+ */
+APPLESTATIC void
+nfscl_freelayout(struct nfscllayout *layp)
+{
+	struct nfsclflayout *flp, *nflp;
+
+	LIST_FOREACH_SAFE(flp, &layp->nfsly_flay, nfsfl_list, nflp) {
+		LIST_REMOVE(flp, nfsfl_list);
+		nfscl_freeflayout(flp);
+	}
+	free(layp, M_NFSLAYOUT);
+}
+
+/*
+ * Free up a file layout structure.
+ */
+APPLESTATIC void
+nfscl_freeflayout(struct nfsclflayout *flp)
+{
+	int i;
+
+	for (i = 0; i < flp->nfsfl_fhcnt; i++)
+		free(flp->nfsfl_fh[i], M_NFSFH);
+	free(flp, M_NFSFLAYOUT);
+}
+
+/*
+ * Free up a file layout devinfo structure.
+ */
+APPLESTATIC void
+nfscl_freedevinfo(struct nfscldevinfo *dip)
+{
+	int i;
+	struct nfsclds *dsp;
+
+	for (i = 0; i < dip->nfsdi_addrcnt; i++) {
+		dsp = nfsfldi_addr(dip, i);
+		if (dsp->nfsclds_sock.nr_nam != NULL) {
+			/* Both are set or both are NULL. */
+			NFSFREECRED(dsp->nfsclds_sock.nr_cred);
+			free(dsp->nfsclds_sock.nr_nam, M_SONAME);
+		}
+	}
+	free(dip, M_NFSDEVINFO);
+}
+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201201230438.q0N4cVpo007458>