Merge branch 'linux-legacy' into refs/top-bases/linux-zfs-branch

This commit is contained in:
Brian Behlendorf 2010-05-18 12:17:18 -07:00
commit 9c65da32f1
1 changed files with 14 additions and 9 deletions

View File

@ -865,7 +865,7 @@ zpool_find_import_impl(libzfs_handle_t *hdl, int argc, char **argv,
int i;
DIR *dirp = NULL;
struct dirent64 *dp;
char path[MAXPATHLEN], path2[MAXPATHLEN];
char path[MAXPATHLEN];
char *end;
size_t pathleft;
struct stat64 statbuf;
@ -901,6 +901,7 @@ zpool_find_import_impl(libzfs_handle_t *hdl, int argc, char **argv,
*/
for (i = 0; i < argc; i++) {
char *rdsk;
int dfd;
/* use realpath to normalize the path */
if (realpath(argv[i], path) == 0) {
@ -924,7 +925,8 @@ zpool_find_import_impl(libzfs_handle_t *hdl, int argc, char **argv,
else
rdsk = path;
if ((dirp = opendir(rdsk)) == NULL) {
if ((dfd = open64(rdsk, O_RDONLY)) < 0 ||
(dirp = fdopendir(dfd)) == NULL) {
zfs_error_aux(hdl, strerror(errno));
(void) zfs_error_fmt(hdl, EZFS_BADPATH,
dgettext(TEXT_DOMAIN, "cannot open '%s'"),
@ -941,19 +943,20 @@ zpool_find_import_impl(libzfs_handle_t *hdl, int argc, char **argv,
(name[1] == 0 || (name[1] == '.' && name[2] == 0)))
continue;
snprintf(path2, sizeof (path2), "%s%s", rdsk, name);
if ((fd = openat64(dfd, name, O_RDONLY)) < 0)
continue;
/*
* Ignore failed stats. We only want regular
* files, character devs and block devs.
*/
if (stat64(path2, &statbuf) != 0 ||
if (fstat64(fd, &statbuf) != 0 ||
(!S_ISREG(statbuf.st_mode) &&
!S_ISBLK(statbuf.st_mode)))
continue;
if ((fd = open64(path2, O_RDONLY)) < 0)
!S_ISCHR(statbuf.st_mode) &&
!S_ISBLK(statbuf.st_mode))) {
(void) close(fd);
continue;
}
if ((zpool_read_label(fd, &config)) != 0) {
(void) close(fd);
@ -986,7 +989,9 @@ zpool_find_import_impl(libzfs_handle_t *hdl, int argc, char **argv,
config = NULL;
continue;
}
if (add_config(hdl, &pools, path2, config) != 0)
/* use the non-raw path for the config */
(void) strlcpy(end, name, pathleft);
if (add_config(hdl, &pools, path, config) != 0)
goto error;
}
}