Add linux user util support
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 26 Aug 2010 18:57:29 +0000 (11:57 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 31 Aug 2010 20:42:01 +0000 (13:42 -0700)
This topic branch contains required changes to the user space
utilities to allow them to integrate cleanly with Linux.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
cmd/zdb/zdb.c
cmd/zfs/zfs_main.c
cmd/zinject/zinject.c
cmd/zpool/zpool_main.c
lib/libzfs/libzfs_sendrecv.c
lib/libzfs/libzfs_util.c

index d035480..a5ad7fe 100644 (file)
@@ -3036,8 +3036,8 @@ main(int argc, char **argv)
        }
 
        kernel_init(FREAD);
-       g_zfs = libzfs_init();
-       ASSERT(g_zfs != NULL);
+       if ((g_zfs = libzfs_init()) == NULL)
+               return (1);
 
        if (dump_all)
                verbose = MAX(verbose, 1);
index ebcec2d..b0e6180 100644 (file)
@@ -4102,17 +4102,6 @@ main(int argc, char **argv)
 
        opterr = 0;
 
-       if ((g_zfs = libzfs_init()) == NULL) {
-               (void) fprintf(stderr, gettext("internal error: failed to "
-                   "initialize ZFS library\n"));
-               return (1);
-       }
-
-       zpool_set_history_str("zfs", argc, argv, history_str);
-       verify(zpool_stage_history(g_zfs, history_str) == 0);
-
-       libzfs_print_on_error(g_zfs, B_TRUE);
-
        if ((mnttab_file = fopen(MNTTAB, "r")) == NULL) {
                (void) fprintf(stderr, gettext("internal error: unable to "
                    "open %s\n"), MNTTAB);
@@ -4158,9 +4147,18 @@ main(int argc, char **argv)
                /*
                 * Special case '-?'
                 */
-               if (strcmp(cmdname, "-?") == 0)
+               if ((strcmp(cmdname, "-?") == 0) ||
+                   (strcmp(cmdname, "--help") == 0))
                        usage(B_TRUE);
 
+               if ((g_zfs = libzfs_init()) == NULL)
+                       return (1);
+
+               zpool_set_history_str("zfs", argc, argv, history_str);
+               verify(zpool_stage_history(g_zfs, history_str) == 0);
+
+               libzfs_print_on_error(g_zfs, B_TRUE);
+
                /*
                 * Run the appropriate command.
                 */
index 643d73e..3ad90e3 100644 (file)
@@ -573,19 +573,6 @@ main(int argc, char **argv)
        int ret;
        int flags = 0;
 
-       if ((g_zfs = libzfs_init()) == NULL) {
-               (void) fprintf(stderr, "internal error: failed to "
-                   "initialize ZFS library\n");
-               return (1);
-       }
-
-       libzfs_print_on_error(g_zfs, B_TRUE);
-
-       if ((zfs_fd = open(ZFS_DEV, O_RDWR)) < 0) {
-               (void) fprintf(stderr, "failed to open ZFS device\n");
-               return (1);
-       }
-
        if (argc == 1) {
                /*
                 * No arguments.  Print the available handlers.  If there are no
@@ -765,6 +752,16 @@ main(int argc, char **argv)
        argc -= optind;
        argv += optind;
 
+       if ((g_zfs = libzfs_init()) == NULL)
+               return (1);
+
+       libzfs_print_on_error(g_zfs, B_TRUE);
+
+       if ((zfs_fd = open(ZFS_DEV, O_RDWR)) < 0) {
+               (void) fprintf(stderr, "failed to open ZFS device\n");
+               return (1);
+       }
+
        if (cancel != NULL) {
                /*
                 * '-c' is invalid with any other options.
index b1b71ac..3859bf7 100644 (file)
@@ -4712,14 +4712,6 @@ main(int argc, char **argv)
        (void) setlocale(LC_ALL, "");
        (void) textdomain(TEXT_DOMAIN);
 
-       if ((g_zfs = libzfs_init()) == NULL) {
-               (void) fprintf(stderr, gettext("internal error: failed to "
-                   "initialize ZFS library\n"));
-               return (1);
-       }
-
-       libzfs_print_on_error(g_zfs, B_TRUE);
-
        opterr = 0;
 
        /*
@@ -4735,9 +4727,15 @@ main(int argc, char **argv)
        /*
         * Special case '-?'
         */
-       if (strcmp(cmdname, "-?") == 0)
+       if ((strcmp(cmdname, "-?") == 0) ||
+            strcmp(cmdname, "--help") == 0)
                usage(B_TRUE);
 
+       if ((g_zfs = libzfs_init()) == NULL)
+               return (1);
+
+       libzfs_print_on_error(g_zfs, B_TRUE);
+
        zpool_set_history_str("zpool", argc, argv, history_str);
        verify(zpool_stage_history(g_zfs, history_str) == 0);
 
index 40d1d2e..94e64e6 100644 (file)
 #include <stddef.h>
 #include <fcntl.h>
 #include <sys/mount.h>
+#include <sys/mntent.h>
+#include <sys/mnttab.h>
+#include <sys/avl.h>
+#include <sys/debug.h>
+#include <stddef.h>
 #include <pthread.h>
 #include <umem.h>
 
index 71f8183..3c4fae5 100644 (file)
@@ -614,6 +614,13 @@ libzfs_init(void)
        }
 
        if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR)) < 0) {
+               (void) fprintf(stderr, gettext("Unable to open %s: %s.\n"),
+                              ZFS_DEV, strerror(errno));
+               if (errno == ENOENT)
+                       (void) fprintf(stderr,
+                            gettext("Verify the ZFS module stack is "
+                            "loaded by running '/sbin/modprobe zfs'.\n"));
+
                free(hdl);
                return (NULL);
        }