Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Jul 2018 21:31:24 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r337014 - vendor-sys/illumos/dist/uts/common/fs/zfs vendor/illumos/dist/cmd/zdb vendor/illumos/dist/lib/libzfs/common
Message-ID:  <201807312131.w6VLVOjR053115@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Tue Jul 31 21:31:24 2018
New Revision: 337014
URL: https://svnweb.freebsd.org/changeset/base/337014

Log:
  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 <matt@delphix.com>
  Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com>
  Approved by: Matt Ahrens <mahrens@delphix.com>
  Author:     Paul Dagnelie <pcd@delphix.com>

Modified:
  vendor/illumos/dist/cmd/zdb/zdb.c
  vendor/illumos/dist/lib/libzfs/common/libzfs_diff.c

Changes in other areas also in this revision:
Modified:
  vendor-sys/illumos/dist/uts/common/fs/zfs/zfs_znode.c

Modified: vendor/illumos/dist/cmd/zdb/zdb.c
==============================================================================
--- vendor/illumos/dist/cmd/zdb/zdb.c	Tue Jul 31 21:26:03 2018	(r337013)
+++ vendor/illumos/dist/cmd/zdb/zdb.c	Tue Jul 31 21:31:24 2018	(r337014)
@@ -108,6 +108,7 @@ uint64_t *zopt_object = NULL;
 static unsigned zopt_objects = 0;
 libzfs_handle_t *g_zfs;
 uint64_t max_inflight = 1000;
+static int leaked_objects = 0;
 
 static void snprintf_blkptr_compact(char *, size_t, const blkptr_t *);
 
@@ -1963,9 +1964,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);
 	}
@@ -2295,6 +2299,11 @@ dump_dir(objset_t *os)
 		(void) fprintf(stderr, "dmu_object_next() = %d\n", error);
 		abort();
 	}
+	if (leaked_objects != 0) {
+		(void) printf("%d potentially leaked objects detected\n",
+		    leaked_objects);
+		leaked_objects = 0;
+	}
 }
 
 static void
@@ -5364,5 +5373,5 @@ main(int argc, char **argv)
 	libzfs_fini(g_zfs);
 	kernel_fini();
 
-	return (0);
+	return (error);
 }

Modified: vendor/illumos/dist/lib/libzfs/common/libzfs_diff.c
==============================================================================
--- vendor/illumos/dist/lib/libzfs/common/libzfs_diff.c	Tue Jul 31 21:26:03 2018	(r337013)
+++ vendor/illumos/dist/lib/libzfs/common/libzfs_diff.c	Tue Jul 31 21:31:24 2018	(r337014)
@@ -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 <ikozhukhov@gmail.com>
  */
@@ -103,7 +103,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 "



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201807312131.w6VLVOjR053115>