MFV r319743: 8108 zdb -l fails to read labels 2 and 3

illumos/illumos-gate@22c8b9583d
22c8b9583d

https://www.illumos.org/issues/8108

Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Reviewed by: Andrew Stormont <andyjstormont@gmail.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Author: Yuri Pankov <yuri.pankov@nexenta.com>

MFC after:	3 weeks
This commit is contained in:
asomers 2017-10-02 22:39:12 +00:00
parent b10154d415
commit 39c93f3da3

View File

@ -2186,24 +2186,29 @@ dump_label(const char *dev)
(void) snprintf(path, sizeof (path), "%s%s", ZFS_RDISK_ROOTD,
dev);
if ((s = strrchr(dev, 's')) == NULL || !isdigit(*(s + 1)))
if (((s = strrchr(dev, 's')) == NULL &&
(s = strchr(dev, 'p')) == NULL) ||
!isdigit(*(s + 1)))
(void) strlcat(path, "s0", sizeof (path));
}
if (stat64(path, &statbuf) != 0) {
(void) printf("failed to stat '%s': %s\n", path,
if ((fd = open64(path, O_RDONLY)) < 0) {
(void) fprintf(stderr, "cannot open '%s': %s\n", path,
strerror(errno));
exit(1);
}
if (S_ISBLK(statbuf.st_mode)) {
(void) printf("cannot use '%s': character device required\n",
path);
if (fstat64(fd, &statbuf) != 0) {
(void) fprintf(stderr, "failed to stat '%s': %s\n", path,
strerror(errno));
(void) close(fd);
exit(1);
}
if ((fd = open64(path, O_RDONLY)) < 0) {
(void) printf("cannot open '%s': %s\n", path, strerror(errno));
if (S_ISBLK(statbuf.st_mode)) {
(void) fprintf(stderr,
"cannot use '%s': character device required\n", path);
(void) close(fd);
exit(1);
}