A little hackery to handle using zdb when the module stack isn't loaded. This is a hack and should be addressed upstream, zdb should not be attempting to initialize services it doesn't need

This commit is contained in:
Brian Behlendorf 2009-01-14 14:25:25 -08:00
parent 9beccacec1
commit 4fdb04d0a1
1 changed files with 12 additions and 3 deletions

View File

@ -567,8 +567,16 @@ libzfs_init(void)
#endif #endif
if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR)) < 0) { if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR)) < 0) {
free(hdl); /* XXX: Allow this failure on linux systems for now. It
return (NULL); * occurs when we attempt to open the /dev/zfs without the
* 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);
return (NULL);
}
} }
if ((hdl->libzfs_mnttab = fopen(MNTTAB, "r")) == NULL) { if ((hdl->libzfs_mnttab = fopen(MNTTAB, "r")) == NULL) {
@ -588,7 +596,8 @@ libzfs_init(void)
void void
libzfs_fini(libzfs_handle_t *hdl) libzfs_fini(libzfs_handle_t *hdl)
{ {
(void) close(hdl->libzfs_fd); if (hdl->libzfs_fd != -1)
(void) close(hdl->libzfs_fd);
if (hdl->libzfs_mnttab) if (hdl->libzfs_mnttab)
(void) fclose(hdl->libzfs_mnttab); (void) fclose(hdl->libzfs_mnttab);
if (hdl->libzfs_sharetab) if (hdl->libzfs_sharetab)