libbe: bail out early if the zfs kmod isn't loaded

As noted in the comment, we already know the rest of libbe_init() will
fail because there's no pool imported.  Avoid the side effect by
checking beforehand and bailing out early.

With this, freebsd-update(8) should no longer trigger a load of the zfs
kmod just because it runs `bectl check`.

Reviewed by:	jwmaag_gmail.com, rew
Differential Revision:	https://reviews.freebsd.org/D36188
This commit is contained in:
Kyle Evans 2023-07-06 19:41:14 -05:00
parent a146207d66
commit 2f700ca965

View file

@ -29,6 +29,7 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/module.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/ucred.h>
@ -119,6 +120,16 @@ libbe_init(const char *root)
lbh = NULL;
poolname = pos = NULL;
/*
* If the zfs kmod's not loaded then the later libzfs_init() will load
* the module for us, but that's not desirable for a couple reasons. If
* the module's not loaded, there's no pool imported and we're going to
* fail anyways. We also don't really want libbe consumers to have that
* kind of side-effect (module loading) in the general case.
*/
if (modfind("zfs") < 0)
goto err;
if ((lbh = calloc(1, sizeof(libbe_handle_t))) == NULL)
goto err;