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) { |