Print this page


Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/dlmgmtd/dlmgmt_main.c
          +++ new/usr/src/cmd/dlmgmtd/dlmgmt_main.c
↓ open down ↓ 118 lines elided ↑ open up ↑
 119  119                  return;
 120  120  
 121  121          if (door_revoke(dlmgmt_door_fd) == -1) {
 122  122                  dlmgmt_log(LOG_WARNING, "door_revoke(%s) failed: %s",
 123  123                      DLMGMT_DOOR, strerror(errno));
 124  124          }
 125  125          (void) dlmgmt_set_doorfd(B_FALSE);
 126  126          dlmgmt_door_fd = -1;
 127  127  }
 128  128  
 129      -static int
      129 +int
 130  130  dlmgmt_door_attach(zoneid_t zoneid, char *rootdir)
 131  131  {
 132  132          int     fd;
 133  133          int     err = 0;
 134  134          char    doorpath[MAXPATHLEN];
 135  135          struct stat statbuf;
 136  136  
 137  137          /* Handle running in a non-native branded zone (i.e. has /native) */
 138  138          (void) snprintf(doorpath, sizeof (doorpath), "%s/native%s",
 139  139              rootdir, DLMGMT_TMPFS_DIR);
↓ open down ↓ 85 lines elided ↑ open up ↑
 225  225                  return (err);
 226  226          return (dlmgmt_door_attach(zoneid, rootdir));
 227  227  }
 228  228  
 229  229  /*
 230  230   * Initialize each running zone.
 231  231   */
 232  232  static int
 233  233  dlmgmt_allzones_init(void)
 234  234  {
 235      -        int             i;
      235 +        int             err, i;
 236  236          zoneid_t        *zids = NULL;
 237  237          uint_t          nzids, nzids_saved;
 238  238  
 239  239          if (zone_list(NULL, &nzids) != 0)
 240  240                  return (errno);
 241  241  again:
 242  242          nzids *= 2;
 243  243          if ((zids = malloc(nzids * sizeof (zoneid_t))) == NULL)
 244  244                  return (errno);
 245  245          nzids_saved = nzids;
 246  246          if (zone_list(zids, &nzids) != 0) {
 247  247                  free(zids);
 248  248                  return (errno);
 249  249          }
 250  250          if (nzids > nzids_saved) {
 251  251                  free(zids);
 252  252                  goto again;
 253  253          }
 254  254  
 255  255          for (i = 0; i < nzids; i++) {
 256      -                int res;
 257      -                zone_status_t status;
 258      -
 259      -                /*
 260      -                 * Skip over zones that have gone away or are going down
 261      -                 * since we got the list.  Process all zones in the list,
 262      -                 * logging errors for any that failed.
 263      -                 */
 264      -                if (zone_getattr(zids[i], ZONE_ATTR_STATUS, &status,
 265      -                    sizeof (status)) < 0)
 266      -                        continue;
 267      -                switch (status) {
 268      -                        case ZONE_IS_SHUTTING_DOWN:
 269      -                        case ZONE_IS_EMPTY:
 270      -                        case ZONE_IS_DOWN:
 271      -                        case ZONE_IS_DYING:
 272      -                        case ZONE_IS_DEAD:
 273      -                                /* FALLTHRU */
 274      -                                continue;
 275      -                        default:
 276      -                                break;
 277      -                }
 278      -                if ((res = dlmgmt_zone_init(zids[i])) != 0) {
 279      -                        (void) fprintf(stderr, "zone (%ld) init error %s",
 280      -                            zids[i], strerror(res));
 281      -                        dlmgmt_log(LOG_ERR, "zone (%d) init error %s",
 282      -                            zids[i], strerror(res));
 283      -                }
      256 +                if ((err = dlmgmt_zone_init(zids[i])) != 0)
      257 +                        break;
 284  258          }
 285  259          free(zids);
 286      -        return (0);
      260 +        return (err);
 287  261  }
 288  262  
 289  263  static int
 290  264  dlmgmt_init(void)
 291  265  {
 292  266          int     err;
 293  267          char    *fmri, *c;
 294  268          char    filename[MAXPATHLEN];
 295  269  
 296  270          if (dladm_open(&dld_handle) != DLADM_STATUS_OK) {
↓ open down ↓ 296 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX