usr/src/lib/libdiskmgt/common/slice.c
changeset 767 0aa24dfb5d87
parent 0 68f95e015346
child 871 f917b2ed7d21
equal deleted inserted replaced
766:c521de78a32f 767:0aa24dfb5d87
    18  * information: Portions Copyright [yyyy] [name of copyright owner]
    18  * information: Portions Copyright [yyyy] [name of copyright owner]
    19  *
    19  *
    20  * CDDL HEADER END
    20  * CDDL HEADER END
    21  */
    21  */
    22 /*
    22 /*
    23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
    23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
    24  * Use is subject to license terms.
    24  * Use is subject to license terms.
    25  */
    25  */
    26 
    26 
    27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
    27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
    28 
    28 
    58 	int	(*detectorp)(char *slice, nvlist_t *attrs, int *errp);
    58 	int	(*detectorp)(char *slice, nvlist_t *attrs, int *errp);
    59 	char	*used_by;
    59 	char	*used_by;
    60 } detectors[] = {
    60 } detectors[] = {
    61 	{inuse_mnt, DM_USE_MOUNT},
    61 	{inuse_mnt, DM_USE_MOUNT},
    62 	{inuse_svm, DM_USE_SVM},
    62 	{inuse_svm, DM_USE_SVM},
       
    63 	{inuse_zpool, DM_USE_ZPOOL},
    63 	{inuse_lu, DM_USE_LU},
    64 	{inuse_lu, DM_USE_LU},
    64 	{inuse_dump, DM_USE_DUMP},
    65 	{inuse_dump, DM_USE_DUMP},
    65 	{inuse_vxvm, DM_USE_VXVM},
    66 	{inuse_vxvm, DM_USE_VXVM},
    66 	{inuse_fs, DM_USE_FS},  /* fs should always be last */
    67 	{inuse_fs, DM_USE_FS},  /* fs should always be last */
    67 	{NULL, NULL}
    68 	{NULL, NULL}
   451 	    return (ENODEV);
   452 	    return (ENODEV);
   452 	}
   453 	}
   453 
   454 
   454 	/* First make sure media is inserted and spun up. */
   455 	/* First make sure media is inserted and spun up. */
   455 	if (!media_read_info(fd, &minfo)) {
   456 	if (!media_read_info(fd, &minfo)) {
   456 #ifdef i386
       
   457 	    /* XXX Work around bug 4725434 */
       
   458 	    if (dp->p.disk->removable)
       
   459 #endif
       
   460 	    return (ENODEV);
   457 	    return (ENODEV);
   461 	}
   458 	}
   462 
   459 
   463 	if ((status = read_vtoc(fd, &vtoc)) >= 0) {
   460 	if ((status = read_vtoc(fd, &vtoc)) >= 0) {
   464 	    data_format = FMT_VTOC;
   461 	    data_format = FMT_VTOC;
   836 
   833 
   837 	    if ((dirp = fdopendir(fd)) != NULL) {
   834 	    if ((dirp = fdopendir(fd)) != NULL) {
   838 		struct dirent	*dentp;
   835 		struct dirent	*dentp;
   839 
   836 
   840 		dentp = (struct dirent *)malloc(sizeof (struct dirent) +
   837 		dentp = (struct dirent *)malloc(sizeof (struct dirent) +
   841 		    _PC_NAME_MAX + 1);
   838 		    PATH_MAX + 1);
   842 		if (dentp != NULL) {
   839 		if (dentp != NULL) {
   843 #ifdef _LP64
   840 #ifdef _LP64
   844 		    while (readdir_r(dirp, dentp, &result) != NULL) {
   841 		    while (readdir_r(dirp, dentp, &result) != NULL) {
   845 #else
   842 #else
   846 		    while (readdir_r(dirp, dentp) != NULL) {
   843 		    while (readdir_r(dirp, dentp) != NULL) {
  1090 
  1087 
  1091 	slice_rdsk2dsk(volm_path, devpath, sizeof (devpath));
  1088 	slice_rdsk2dsk(volm_path, devpath, sizeof (devpath));
  1092 
  1089 
  1093 	error = 0;
  1090 	error = 0;
  1094 	dentp = (struct dirent *)malloc(sizeof (struct dirent) +
  1091 	dentp = (struct dirent *)malloc(sizeof (struct dirent) +
  1095 	    _PC_NAME_MAX + 1);
  1092 	    PATH_MAX + 1);
  1096 	if (dentp != NULL) {
  1093 	if (dentp != NULL) {
  1097 #ifdef _LP64
  1094 #ifdef _LP64
  1098 	    while (readdir_r(dirp, dentp, &result) != NULL) {
  1095 	    while (readdir_r(dirp, dentp, &result) != NULL) {
  1099 #else
  1096 #else
  1100 	    while (readdir_r(dirp, dentp) != NULL) {
  1097 	    while (readdir_r(dirp, dentp) != NULL) {
  1282 		    char		devpath[MAXPATHLEN];
  1279 		    char		devpath[MAXPATHLEN];
  1283 
  1280 
  1284 		    slice_rdsk2dsk(volm_path, devpath, sizeof (devpath));
  1281 		    slice_rdsk2dsk(volm_path, devpath, sizeof (devpath));
  1285 
  1282 
  1286 		    dentp = (struct dirent *)malloc(sizeof (struct dirent) +
  1283 		    dentp = (struct dirent *)malloc(sizeof (struct dirent) +
  1287 			_PC_NAME_MAX + 1);
  1284 			PATH_MAX + 1);
  1288 		    if (dentp != NULL) {
  1285 		    if (dentp != NULL) {
  1289 #ifdef _LP64
  1286 #ifdef _LP64
  1290 			while (readdir_r(dirp, dentp, &result) != NULL) {
  1287 			while (readdir_r(dirp, dentp, &result) != NULL) {
  1291 #else
  1288 #else
  1292 			while (readdir_r(dirp, dentp) != NULL) {
  1289 			while (readdir_r(dirp, dentp) != NULL) {
  1359 		char		devpath[MAXPATHLEN];
  1356 		char		devpath[MAXPATHLEN];
  1360 
  1357 
  1361 		slice_rdsk2dsk(volm_path, devpath, sizeof (devpath));
  1358 		slice_rdsk2dsk(volm_path, devpath, sizeof (devpath));
  1362 
  1359 
  1363 		dentp = (struct dirent *)malloc(sizeof (struct dirent) +
  1360 		dentp = (struct dirent *)malloc(sizeof (struct dirent) +
  1364 		    _PC_NAME_MAX + 1);
  1361 		    PATH_MAX + 1);
  1365 		if (dentp != NULL) {
  1362 		if (dentp != NULL) {
  1366 #ifdef _LP64
  1363 #ifdef _LP64
  1367 		    while (readdir_r(dirp, dentp, &result) != NULL) {
  1364 		    while (readdir_r(dirp, dentp, &result) != NULL) {
  1368 #else
  1365 #else
  1369 		    while (readdir_r(dirp, dentp) != NULL) {
  1366 		    while (readdir_r(dirp, dentp) != NULL) {