svn commit: r230474 - in projects/nfsv4.1-client/sys/fs: nfs
nfsclient
Rick Macklem
rmacklem at FreeBSD.org
Mon Jan 23 04:38:32 UTC 2012
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);
+}
+
More information about the svn-src-projects
mailing list