From owner-svn-src-projects@FreeBSD.ORG Mon Jan 23 04:38:32 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3F8E4106564A; Mon, 23 Jan 2012 04:38:32 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 207668FC15; Mon, 23 Jan 2012 04:38:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q0N4cVnQ007462; Mon, 23 Jan 2012 04:38:31 GMT (envelope-from rmacklem@svn.freebsd.org) Received: (from rmacklem@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q0N4cVpo007458; Mon, 23 Jan 2012 04:38:31 GMT (envelope-from rmacklem@svn.freebsd.org) Message-Id: <201201230438.q0N4cVpo007458@svn.freebsd.org> From: Rick Macklem Date: Mon, 23 Jan 2012 04:38:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r230474 - in projects/nfsv4.1-client/sys/fs: nfs nfsclient X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Jan 2012 04:38:32 -0000 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); +} +