Print this page
NEX-7233 Attempting to destroy ZFS filesystem and create ZFS volume with the same name caused system panic
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/dev/sdev_subr.c
          +++ new/usr/src/uts/common/fs/dev/sdev_subr.c
↓ open down ↓ 2163 lines elided ↑ open up ↑
2164 2164                  case SDEV_VTOR_STALE:
2165 2165                          /*
2166 2166                           * The name exists, but the cache entry is
2167 2167                           * stale and needs to be re-created.
2168 2168                           */
2169 2169                          ASSERT(RW_READ_HELD(&ddv->sdev_contents));
2170 2170                          if (rw_tryupgrade(&ddv->sdev_contents) == 0) {
2171 2171                                  rw_exit(&ddv->sdev_contents);
2172 2172                                  rw_enter(&ddv->sdev_contents, RW_WRITER);
2173 2173                          }
     2174 +
     2175 +                        if (SDEVTOV(dv)->v_type == VDIR)
     2176 +                                (void) sdev_cleandir(dv, NULL, SDEV_ENFORCE);
     2177 +
2174 2178                          sdev_cache_update(ddv, &dv, nm, SDEV_CACHE_DELETE);
2175 2179                          rw_downgrade(&ddv->sdev_contents);
2176 2180                          SDEV_RELE(dv);
2177 2181                          dv = NULL;
2178 2182                          goto lookup_create_node;
2179 2183                          /* FALLTHRU */
2180 2184                  case SDEV_VTOR_INVALID:
2181 2185                          SD_TRACE_FAILED_LOOKUP(ddv, nm, retried);
2182 2186                          sdcmn_err7(("lookup: destroy invalid "
2183 2187                              "node: %s(%p)\n", dv->sdev_name, (void *)dv));
↓ open down ↓ 962 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX