Print this page
dss_paths[] entries need cleanup too

@@ -813,12 +813,12 @@
         sip->dss_npaths = dss_npaths;
         sip->dss_paths = kmem_alloc(dss_npaths *
             sizeof (rfs4_dss_path_t *), KM_SLEEP);
 
         for (i = 0; i < dss_npaths; i++) {
-                /* CSTYLED */
-                sip->dss_paths[i] = rfs4_dss_newpath(nsrv4, sip, dss_paths[i], i);
+                sip->dss_paths[i] =
+                    rfs4_dss_newpath(nsrv4, sip, dss_paths[i], i);
         }
 
         mutex_enter(&nsrv4->servinst_lock);
         if (nsrv4->nfs4_cur_servinst != NULL) {
                 /* add to linked list */

@@ -852,13 +852,29 @@
         for (sip = current; sip != NULL; sip = prev) {
                 prev = sip->prev;
                 rw_destroy(&sip->rwlock);
                 if (sip->oldstate)
                         kmem_free(sip->oldstate, sizeof (rfs4_oldstate_t));
-                if (sip->dss_paths)
+                if (sip->dss_paths) {
+                        int i = sip->dss_npaths;
+
+                        while (i > 0) {
+                                i--;
+                                if (sip->dss_paths[i] != NULL) {
+                                        char *path = sip->dss_paths[i]->path;
+
+                                        if (path != NULL) {
+                                                kmem_free(path,
+                                                    strlen(path) + 1);
+                                        }
+                                        kmem_free(sip->dss_paths[i],
+                                            sizeof (rfs4_dss_path_t));
+                                }
+                        }
                         kmem_free(sip->dss_paths,
                             sip->dss_npaths * sizeof (rfs4_dss_path_t *));
+                }
                 kmem_free(sip, sizeof (rfs4_servinst_t));
 #ifdef DEBUG
                 n++;
 #endif
         }