Author: mav
Date: Tue Jul 31 22:50:50 2018
New Revision: 337017
URL: https://svnweb.freebsd.org/changeset/base/337017

Log:
  MFV r337014:
  9421 zdb should detect and print out the number of "leaked" objects
  9422 zfs diff and zdb should explicitly mark objects that are on the deleted 
queue
  
  illumos/illumos-gate@20b5dafb425396adaebd0267d29e1026fc4dc413
  
  Reviewed by: Matt Ahrens <m...@delphix.com>
  Reviewed by: Pavel Zakharov <pavel.zakha...@delphix.com>
  Approved by: Matt Ahrens <mahr...@delphix.com>
  Author:     Paul Dagnelie <p...@delphix.com>

Modified:
  head/cddl/contrib/opensolaris/cmd/zdb/zdb.c
  head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
Directory Properties:
  head/cddl/contrib/opensolaris/   (props changed)
  head/cddl/contrib/opensolaris/cmd/zdb/   (props changed)
  head/cddl/contrib/opensolaris/lib/libzfs/   (props changed)
  head/sys/cddl/contrib/opensolaris/   (props changed)

Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Tue Jul 31 21:42:31 2018        
(r337016)
+++ head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Tue Jul 31 22:50:50 2018        
(r337017)
@@ -108,6 +108,7 @@ static uint64_t *zopt_object = NULL;
 static unsigned zopt_objects = 0;
 static libzfs_handle_t *g_zfs;
 static uint64_t max_inflight = 1000;
+static int leaked_objects = 0;
 
 static void snprintf_blkptr_compact(char *, size_t, const blkptr_t *);
 
@@ -1988,9 +1989,12 @@ dump_znode(objset_t *os, uint64_t object, void *data, 
 
        if (dump_opt['d'] > 4) {
                error = zfs_obj_to_path(os, object, path, sizeof (path));
-               if (error != 0) {
+               if (error == ESTALE) {
+                       (void) snprintf(path, sizeof (path), "on delete queue");
+               } else if (error != 0) {
+                       leaked_objects++;
                        (void) snprintf(path, sizeof (path),
-                           "\?\?\?<object#%llu>", (u_longlong_t)object);
+                           "path not found, possibly leaked");
                }
                (void) printf("\tpath   %s\n", path);
        }
@@ -2320,6 +2324,12 @@ dump_dir(objset_t *os)
        }
 
        ASSERT3U(object_count, ==, usedobjs);
+
+       if (leaked_objects != 0) {
+               (void) printf("%d potentially leaked objects detected\n",
+                   leaked_objects);
+               leaked_objects = 0;
+       }
 }
 
 static void
@@ -5405,5 +5415,5 @@ main(int argc, char **argv)
        libzfs_fini(g_zfs);
        kernel_fini();
 
-       return (0);
+       return (error);
 }

Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c       Tue Jul 
31 21:42:31 2018        (r337016)
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c       Tue Jul 
31 22:50:50 2018        (r337017)
@@ -22,7 +22,7 @@
 /*
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2015 by Delphix. All rights reserved.
+ * Copyright (c) 2015, 2017 by Delphix. All rights reserved.
  * Copyright 2016 Joyent, Inc.
  * Copyright 2016 Igor Kozhukhov <ikozhuk...@gmail.com>
  */
@@ -101,7 +101,10 @@ get_stats_for_obj(differ_info_t *di, const char *dsnam
                return (0);
        }
 
-       if (di->zerr == EPERM) {
+       if (di->zerr == ESTALE) {
+               (void) snprintf(pn, maxlen, "(on_delete_queue)");
+               return (0);
+       } else if (di->zerr == EPERM) {
                (void) snprintf(di->errbuf, sizeof (di->errbuf),
                    dgettext(TEXT_DOMAIN,
                    "The sys_config privilege or diff delegated permission "

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c     Tue Jul 
31 21:42:31 2018        (r337016)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c     Tue Jul 
31 22:50:50 2018        (r337017)
@@ -2102,6 +2102,17 @@ zfs_obj_to_path_impl(objset_t *osp, uint64_t obj, sa_h
        *path = '\0';
        sa_hdl = hdl;
 
+       uint64_t deleteq_obj;
+       VERIFY0(zap_lookup(osp, MASTER_NODE_OBJ,
+           ZFS_UNLINKED_SET, sizeof (uint64_t), 1, &deleteq_obj));
+       error = zap_lookup_int(osp, deleteq_obj, obj);
+       if (error == 0) {
+               return (ESTALE);
+       } else if (error != ENOENT) {
+               return (error);
+       }
+       error = 0;
+
        for (;;) {
                uint64_t pobj;
                char component[MAXNAMELEN + 2];
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to