Print this page
Do rfs4_ss_fini() BEFORE rfs4_servinst_destroy_all().

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/nfs/nfs4_state.c
          +++ new/usr/src/uts/common/fs/nfs/nfs4_state.c
↓ open down ↓ 1488 lines elided ↑ open up ↑
1489 1489   */
1490 1490  void
1491 1491  rfs4_state_zone_fini()
1492 1492  {
1493 1493          rfs4_database_t *dbp;
1494 1494          nfs4_srv_t *nsrv4;
1495 1495          nsrv4 = zone_getspecific(rfs4_zone_key, curzone);
1496 1496  
1497 1497          rfs4_set_deleg_policy(nsrv4, SRV_NEVER_DELEGATE);
1498 1498  
     1499 +        /*
     1500 +         * Clean up any dangling stable storage structures BEFORE calling
     1501 +         * rfs4_servinst_destroy_all() so there are no dangling structures
     1502 +         * (i.e. the srvinsts are all cleared of danglers BEFORE they get
     1503 +         * freed).
     1504 +         */
     1505 +        rfs4_ss_fini(nsrv4);
     1506 +
1499 1507          mutex_enter(&nsrv4->state_lock);
1500 1508  
1501 1509          if (nsrv4->nfs4_server_state == NULL) {
1502 1510                  mutex_exit(&nsrv4->state_lock);
1503 1511                  return;
1504 1512          }
1505 1513  
1506 1514          /* destroy server instances and current instance ptr */
1507 1515          rfs4_servinst_destroy_all(nsrv4);
1508 1516  
↓ open down ↓ 20 lines elided ↑ open up ↑
1529 1537          /* Reset the cache timers for next time */
1530 1538          nsrv4->rfs4_client_cache_time = 0;
1531 1539          nsrv4->rfs4_openowner_cache_time = 0;
1532 1540          nsrv4->rfs4_state_cache_time = 0;
1533 1541          nsrv4->rfs4_lo_state_cache_time = 0;
1534 1542          nsrv4->rfs4_lockowner_cache_time = 0;
1535 1543          nsrv4->rfs4_file_cache_time = 0;
1536 1544          nsrv4->rfs4_deleg_state_cache_time = 0;
1537 1545  
1538 1546          mutex_exit(&nsrv4->state_lock);
1539      -
1540      -        /* clean up any dangling stable storage structures */
1541      -        rfs4_ss_fini(nsrv4);
1542 1547  }
1543 1548  
1544 1549  typedef union {
1545 1550          struct {
1546 1551                  uint32_t start_time;
1547 1552                  uint32_t c_id;
1548 1553          } impl_id;
1549 1554          clientid4 id4;
1550 1555  } cid;
1551 1556  
↓ open down ↓ 2581 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX