Speed up 'zfs list -t snapshot -o name -s name'
[zfs.git] / cmd / zfs / zfs_main.c
index 761c9f7..0f00688 100644 (file)
@@ -572,7 +572,7 @@ zfs_do_clone(int argc, char **argv)
        zfs_handle_t *zhp = NULL;
        boolean_t parents = B_FALSE;
        nvlist_t *props;
-       int ret;
+       int ret = 0;
        int c;
 
        if (nvlist_alloc(&props, NV_UNIQUE_NAME, 0) != 0)
@@ -1058,7 +1058,7 @@ zfs_do_destroy(int argc, char **argv)
         * named snapshot may not exist.  Go straight to libzfs.
         */
        if (cb.cb_recurse && (cp = strchr(argv[0], '@'))) {
-               int ret;
+               int ret = 0;
 
                *cp = '\0';
                if ((zhp = zfs_open(g_zfs, argv[0], ZFS_TYPE_DATASET)) == NULL)
@@ -1285,7 +1285,7 @@ zfs_do_get(int argc, char **argv)
        zprop_get_cbdata_t cb = { 0 };
        int i, c, flags = ZFS_ITER_ARGS_CAN_BE_PATHS;
        char *value, *fields;
-       int ret;
+       int ret = 0;
        int limit = 0;
        zprop_list_t fake_name = { 0 };
 
@@ -1522,7 +1522,7 @@ zfs_do_inherit(int argc, char **argv)
        zfs_prop_t prop;
        inherit_cbdata_t cb = { 0 };
        char *propname;
-       int ret;
+       int ret = 0;
        int flags = 0;
        boolean_t received = B_FALSE;
 
@@ -1728,7 +1728,7 @@ zfs_do_upgrade(int argc, char **argv)
 {
        boolean_t all = B_FALSE;
        boolean_t showversions = B_FALSE;
-       int ret;
+       int ret = 0;
        upgrade_cbdata_t cb = { 0 };
        signed char c;
        int flags = ZFS_ITER_ARGS_CAN_BE_PATHS;
@@ -2020,7 +2020,7 @@ userspace_cb(void *arg, const char *domain, uid_t rid, uint64_t space)
                char sid[ZFS_MAXNAMELEN+32];
                uid_t id;
                uint64_t classes;
-               int err;
+               int err = 0;
                directory_error_t e;
 
                (void) snprintf(sid, sizeof (sid), "%s-%u", domain, rid);
@@ -2650,7 +2650,12 @@ print_dataset(zfs_handle_t *zhp, zprop_list_t *pl, boolean_t scripted)
                        first = B_FALSE;
                }
 
-               if (pl->pl_prop != ZPROP_INVAL) {
+               if (pl->pl_prop == ZFS_PROP_NAME) {
+                       (void) strlcpy(property, zfs_get_name(zhp),
+                           sizeof(property));
+                       propstr = property;
+                       right_justify = zfs_prop_align_right(pl->pl_prop);
+               } else if (pl->pl_prop != ZPROP_INVAL) {
                        if (zfs_prop_get(zhp, pl->pl_prop, property,
                            sizeof (property), NULL, NULL, 0, B_FALSE) != 0)
                                propstr = "-";
@@ -2725,7 +2730,7 @@ zfs_do_list(int argc, char **argv)
        list_cbdata_t cb = { 0 };
        char *value;
        int limit = 0;
-       int ret;
+       int ret = 0;
        zfs_sort_column_t *sortcol = NULL;
        int flags = ZFS_ITER_PROP_LISTSNAPS | ZFS_ITER_ARGS_CAN_BE_PATHS;
 
@@ -2811,6 +2816,13 @@ zfs_do_list(int argc, char **argv)
                fields = default_fields;
 
        /*
+        * If we are only going to list snapshot names and sort by name,
+        * then we can use faster version.
+        */
+       if (strcmp(fields, "name") == 0 && zfs_sort_only_by_name(sortcol))
+               flags |= ZFS_ITER_SIMPLE;
+
+       /*
         * If "-o space" and no types were specified, don't display snapshots.
         */
        if (strcmp(fields, "space") == 0 && types_specified == B_FALSE)
@@ -2855,7 +2867,7 @@ zfs_do_rename(int argc, char **argv)
 {
        zfs_handle_t *zhp;
        int c;
-       int ret;
+       int ret = 0;
        boolean_t recurse = B_FALSE;
        boolean_t parents = B_FALSE;
 
@@ -2934,7 +2946,7 @@ static int
 zfs_do_promote(int argc, char **argv)
 {
        zfs_handle_t *zhp;
-       int ret;
+       int ret = 0;
 
        /* check options */
        if (argc > 1 && argv[1][0] == '-') {
@@ -3055,7 +3067,7 @@ rollback_check(zfs_handle_t *zhp, void *data)
 static int
 zfs_do_rollback(int argc, char **argv)
 {
-       int ret;
+       int ret = 0;
        int c;
        boolean_t force = B_FALSE;
        rollback_cbdata_t cb = { 0 };
@@ -3173,7 +3185,7 @@ static int
 zfs_do_set(int argc, char **argv)
 {
        set_cbdata_t cb;
-       int ret;
+       int ret = 0;
 
        /* check for options */
        if (argc > 1 && argv[1][0] == '-') {
@@ -3227,7 +3239,7 @@ static int
 zfs_do_snapshot(int argc, char **argv)
 {
        boolean_t recursive = B_FALSE;
-       int ret;
+       int ret = 0;
        signed char c;
        nvlist_t *props;
 
@@ -5071,7 +5083,7 @@ zfs_do_holds(int argc, char **argv)
        holds_cbdata_t cb = { 0 };
 
        int limit = 0;
-       int ret;
+       int ret = 0;
        int flags = 0;
 
        /* check options */
@@ -5647,7 +5659,7 @@ static int
 unshare_unmount_path(int op, char *path, int flags, boolean_t is_manual)
 {
        zfs_handle_t *zhp;
-       int ret;
+       int ret = 0;
        struct stat64 statbuf;
        struct extmnttab entry;
        const char *cmdname = (op == OP_SHARE) ? "unshare" : "unmount";
@@ -6055,7 +6067,7 @@ zfs_do_diff(int argc, char **argv)
        char *tosnap = NULL;
        char *fromsnap = NULL;
        char *atp, *copy;
-       int err;
+       int err = 0;
        int c;
 
        while ((c = getopt(argc, argv, "FHt")) != -1) {
@@ -6125,7 +6137,7 @@ zfs_do_diff(int argc, char **argv)
 int
 main(int argc, char **argv)
 {
-       int ret;
+       int ret = 0;
        int i = 0;
        char *cmdname;