public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: xfs@oss.sgi.com
Subject: [PATCH 30/32] db: enable metadump on CRC filesystems
Date: Mon, 30 Sep 2013 13:15:42 +1000	[thread overview]
Message-ID: <1380510944-8571-31-git-send-email-david@fromorbit.com> (raw)
In-Reply-To: <1380510944-8571-1-git-send-email-david@fromorbit.com>

From: Dave Chinner <dchinner@redhat.com>

Now that we can calculate CRCs through xfs_db, we can add support
for recalculating CRCs on obfuscated metadump images. This simply
requires us to call the write verifier manually before writing the
buffer to the metadump image.

We don't need to do anything special to mdrestore, as the metadata
blocks it reads from the image file should already have all the
correct CRCs in them. hence it can be mostly oblivious to the fact
that the filesystem it is resotring contains CRCs.

While there, add IO stack unwinding to xfs_db to prevent metadump
and other db programs from exiting with unreleased buffers in the IO
stack and hence emitting warnings like:

cache_purge: shake on cache 0x69e4f0 left 7 nodes!?

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 db/init.c                 |  5 ++++-
 db/metadump.c             | 24 +++++++++++++++++++-----
 mdrestore/xfs_mdrestore.c |  3 ---
 3 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/db/init.c b/db/init.c
index 2b643f9..dc915fb 100644
--- a/db/init.c
+++ b/db/init.c
@@ -173,9 +173,11 @@ main(
 	int	c, i, done = 0;
 	char	*input;
 	char	**v;
+	int	start_iocur_sp;
 
 	pushfile(stdin);
 	init(argc, argv);
+	start_iocur_sp = iocur_sp;
 
 	for (i = 0; !done && i < ncmdline; i++) {
 		v = breakline(cmdline[i], &c);
@@ -202,7 +204,8 @@ close_devices:
 	 * make sure that we pop the last buffer context we held so that the
 	 * buffer is released before purge the caches during unmount.
 	 */
-	pop_cur();
+	while (iocur_sp > start_iocur_sp)
+		pop_cur();
 	libxfs_umount(mp);
 	if (x.ddev)
 		libxfs_device_close(x.ddev);
diff --git a/db/metadump.c b/db/metadump.c
index ac6a4d6..117dc42 100644
--- a/db/metadump.c
+++ b/db/metadump.c
@@ -172,6 +172,22 @@ write_buf(
 	__int64_t	off;
 	int		i;
 
+	/*
+	 * Run the write verifier to recalculate the buffer CRCs and check
+	 * we are writing something valid to disk
+	 */
+	if (buf->bp && buf->bp->b_ops) {
+		buf->bp->b_error = 0;
+		buf->bp->b_ops->verify_write(buf->bp);
+		if (buf->bp->b_error) {
+			fprintf(stderr,
+	_("%s: write verifer failed on bno 0x%llx/0x%x\n"),
+				__func__, (long long)buf->bp->b_bn,
+				buf->bp->b_bcount);
+			return buf->bp->b_error;
+		}
+	}
+
 	for (i = 0, off = buf->bb, data = buf->data;
 			i < buf->blen;
 			i++, off++, data += BBSIZE) {
@@ -1727,6 +1743,9 @@ copy_inode_chunk(
 
 		if (!process_inode(agno, agino + i, dip))
 			goto pop_out;
+
+		/* calculate the new CRC for the inode */
+		xfs_dinode_calc_crc(mp, dip);
 	}
 skip_processing:
 	if (!write_buf(iocur_top))
@@ -2053,11 +2072,6 @@ metadump_f(
 		return 0;
 	}
 
-	if (xfs_sb_version_hascrc(&mp->m_sb) && dont_obfuscate == 0) {
-		print_warning("Can't obfuscate CRC enabled filesystems yet.");
-		return 0;
-	}
-
 	metablock = (xfs_metablock_t *)calloc(BBSIZE + 1, BBSIZE);
 	if (metablock == NULL) {
 		print_warning("memory allocation failure");
diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c
index fe61766..e57bdb2 100644
--- a/mdrestore/xfs_mdrestore.c
+++ b/mdrestore/xfs_mdrestore.c
@@ -109,9 +109,6 @@ perform_restore(
 	if (sb.sb_magicnum != XFS_SB_MAGIC)
 		fatal("bad magic number for primary superblock\n");
 
-	if (xfs_sb_version_hascrc(&sb))
-		fatal("Can't restore CRC enabled filesystems yet.\n");
-
 	((xfs_dsb_t*)block_buffer)->sb_inprogress = 1;
 
 	if (is_target_file)  {
-- 
1.8.3.2

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  parent reply	other threads:[~2013-09-30  3:15 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1380510944-8571-1-git-send-email-david@fromorbit.com>
2013-09-30  3:15 ` [PATCH 01/32] xfsprogs: fix automatic dependency generation Dave Chinner
2013-10-08 23:00   ` Eric Sandeen
2013-09-30  3:15 ` [PATCH 02/32] libxfs: fix missing filetype updates to xfs_dir2.c Dave Chinner
2013-10-08 22:53   ` Eric Sandeen
2013-10-09 20:41     ` Dave Chinner
2013-10-18 16:45   ` Rich Johnston
2013-09-30  3:15 ` [PATCH 03/32] xfs: fix some minor sparse warnings Dave Chinner
2013-10-08 22:56   ` Eric Sandeen
2013-10-09 20:43     ` Dave Chinner
2013-09-30  3:15 ` [PATCH 04/32] xfs: check magic numbers in dir3 leaf verifier first Dave Chinner
2013-10-08 23:03   ` Eric Sandeen
2013-10-09 20:45     ` Dave Chinner
2013-10-09 20:50       ` Eric Sandeen
2013-09-30  3:15 ` [PATCH 05/32] xfs: ensure we copy buffer type in da btree root splits Dave Chinner
2013-10-08 23:06   ` Eric Sandeen
2013-10-18 16:49   ` Rich Johnston
2013-09-30  3:15 ` [PATCH 06/32] xfs: don't assert fail on bad inode numbers Dave Chinner
2013-10-08 23:09   ` Eric Sandeen
2013-09-30  3:15 ` [PATCH 07/32] xfs: dirent dtype presence is dependent on directory magic numbers Dave Chinner
2013-10-08 23:30   ` Eric Sandeen
2013-10-09 20:51     ` Dave Chinner
2013-10-09 20:57       ` Eric Sandeen
2013-10-18 22:38     ` Rich Johnston
2013-09-30  3:15 ` [PATCH 08/32] xfs: create a shared header file for format-related information Dave Chinner
2013-10-08 23:37   ` Eric Sandeen
2013-10-18 16:59   ` Rich Johnston
2013-10-18 22:40     ` Dave Chinner
2013-10-18 22:43       ` Rich Johnston
2013-10-22 18:07       ` Rich Johnston
2013-09-30  3:15 ` [PATCH 09/32] xfs: unify directory/attribute format definitions Dave Chinner
2013-10-14 20:44   ` Eric Sandeen
2013-10-18 20:32   ` Rich Johnston
2013-10-22 22:25     ` Dave Chinner
2013-09-30  3:15 ` [PATCH 10/32] xfs: split dquot buffer operations out Dave Chinner
2013-09-30  3:15 ` [PATCH 11/32] xfs: decouple inode and bmap btree header files Dave Chinner
2013-09-30  3:15 ` [PATCH 12/32] libxfs: unify xfs_btree.c with kernel code Dave Chinner
2013-09-30  3:15 ` [PATCH 13/32] libxfs: bmap btree owner swap support Dave Chinner
2013-09-30  3:15 ` [PATCH 14/32] libxfs: xfs_rtalloc.c becomes xfs_rtbitmap.c Dave Chinner
2013-09-30  3:15 ` [PATCH 15/32] libxfs: bring across inode buffer readahead verifier changes Dave Chinner
2013-09-30  3:15 ` [PATCH 16/32] libxfs: Minor cleanup and bug fix sync Dave Chinner
2013-09-30  3:15 ` [PATCH 17/32] db: separate out straight buffer IO from map based IO Dave Chinner
2013-09-30  3:15 ` [PATCH 18/32] db: rewrite bbmap to use xfs_buf_map Dave Chinner
2013-09-30  3:15 ` [PATCH 19/32] db: rewrite IO engine to use libxfs Dave Chinner
2013-09-30  3:15 ` [PATCH 20/32] db: introduce verifier support into set_cur Dave Chinner
2013-09-30  3:15 ` [PATCH 21/32] db: indicate if the CRC on a buffer is correct or not Dave Chinner
2013-09-30  3:15 ` [PATCH 22/32] db: verify and calculate inode CRCs Dave Chinner
2013-09-30  3:15 ` [PATCH 23/32] db: verify and calculate dquot CRCs Dave Chinner
2013-09-30  3:15 ` [PATCH 24/32] db: add a special directory buffer verifier Dave Chinner
2013-09-30  3:15 ` [PATCH 25/32] db: add a special attribute " Dave Chinner
2013-09-30  3:15 ` [PATCH 26/32] db: re-enable write support for v5 filesystems Dave Chinner
2013-09-30  3:15 ` [PATCH 27/32] libxfs: fix root inode handling inconsistencies Dave Chinner
2013-09-30  3:15 ` [PATCH 28/32] xfs_db: avoid libxfs buffer lookup warnings Dave Chinner
2013-09-30  3:15 ` [PATCH 29/32] libxfs: work around do_div() not handling 32 bit numerators Dave Chinner
2013-09-30  3:15 ` Dave Chinner [this message]
2013-09-30  3:15 ` [PATCH 31/32] xfs: support larger inode clusters on v5 filesystems Dave Chinner
2013-09-30  3:15 ` [PATCH 32/32] xfsprogs: kill experimental warnings for " Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1380510944-8571-31-git-send-email-david@fromorbit.com \
    --to=david@fromorbit.com \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox