Revert to previous behavior zdb fails when unable to open /dev/zfs.

For the moment I have added an error message to the failure path to
make it clear what happened.  I have also changed the zdb ASSERT to
a VERIFY so we always catch the failure.  For now we will just always
ensure the module stack is loaded, longer term we need something a
little more flexible.
This commit is contained in:
Brian Behlendorf 2009-03-18 12:48:54 -07:00
parent a9b0088f48
commit cc4fbf2c35
2 changed files with 6 additions and 13 deletions

View File

@ -2330,7 +2330,7 @@ main(int argc, char **argv)
kernel_init(FREAD); kernel_init(FREAD);
g_zfs = libzfs_init(); g_zfs = libzfs_init();
ASSERT(g_zfs != NULL); VERIFY(g_zfs != NULL);
for (c = 0; c < 256; c++) { for (c = 0; c < 256; c++) {
if (dump_all && c != 'l' && c != 'R') if (dump_all && c != 'l' && c != 'R')

View File

@ -560,17 +560,11 @@ libzfs_init(void)
} }
if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR)) < 0) { if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR)) < 0) {
/* XXX: Allow this failure on linux systems for now. It (void) fprintf(stderr, "Unable to open %s: (%d) %s\n",
* occurs when we attempt to open the /dev/zfs without the ZFS_DEV, errno, strerror(errno));
* ZFS module stack loaded. This is normally a problem but
* tools such as zdb call this function and never use the
* ioctl() interface. Long term this should be cleaned up.
*/
if (errno != ENXIO) {
free(hdl); free(hdl);
return (NULL); return (NULL);
} }
}
if ((hdl->libzfs_mnttab = fopen(MNTTAB, "r")) == NULL) { if ((hdl->libzfs_mnttab = fopen(MNTTAB, "r")) == NULL) {
(void) close(hdl->libzfs_fd); (void) close(hdl->libzfs_fd);
@ -589,7 +583,6 @@ libzfs_init(void)
void void
libzfs_fini(libzfs_handle_t *hdl) libzfs_fini(libzfs_handle_t *hdl)
{ {
if (hdl->libzfs_fd != -1)
(void) close(hdl->libzfs_fd); (void) close(hdl->libzfs_fd);
if (hdl->libzfs_mnttab) if (hdl->libzfs_mnttab)
(void) fclose(hdl->libzfs_mnttab); (void) fclose(hdl->libzfs_mnttab);