All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] db: increase metadump's default overly long extent discard threshold
@ 2017-10-19  1:24 Darrick J. Wong
  2017-10-19  1:25 ` [PATCH 2/3] xfsprogs: explicitly cast troublesome types to match printf format specifiers Darrick J. Wong
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Darrick J. Wong @ 2017-10-19  1:24 UTC (permalink / raw)
  To: sandeen, darrick.wong; +Cc: linux-xfs, Carlos Maiolino

From: Darrick J. Wong <darrick.wong@oracle.com>

Back in 88b8e1d6d7 ("Make xfs_metadump more robust against bad data"),
metadump grew the ability to ignore a directory extent if it was longer
than 20 blocks.  Presumably this was to protect metadump from dumping
absurdly long extents resulting from bmbt corruption, but it's certainly
possible to create a directory with an extent longer than 20 blocks.
Hilariously, the discards happen with no warning unless the caller
explicitly set -w.

This was raised to 1000 blocks in 7431d134fe8 ("Increase default maximum
extent size for xfs_metadump when copying..."), but it's still possible
to create a directory with an extent longer than 1000 blocks.

Increase the threshold to MAXEXTLEN blocks because it's totally valid
for the filesystem to create extents up to that length.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
---
 db/metadump.c           |    2 +-
 man/man8/xfs_metadump.8 |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)


diff --git a/db/metadump.c b/db/metadump.c
index 6dd06c3..8ffb90f 100644
--- a/db/metadump.c
+++ b/db/metadump.c
@@ -32,7 +32,7 @@
 #include "field.h"
 #include "dir2.h"
 
-#define DEFAULT_MAX_EXT_SIZE	1000
+#define DEFAULT_MAX_EXT_SIZE	MAXEXTLEN
 
 /*
  * It's possible that multiple files in a directory (or attributes
diff --git a/man/man8/xfs_metadump.8 b/man/man8/xfs_metadump.8
index 3731d6a..7207c20 100644
--- a/man/man8/xfs_metadump.8
+++ b/man/man8/xfs_metadump.8
@@ -114,7 +114,7 @@ copied.
 .B \-m
 Set the maximum size of an allowed metadata extent.  Extremely large metadata
 extents are likely to be corrupt, and will be skipped if they exceed
-this value.  The default size is 1000 blocks.
+this value.  The default size is 2097151 blocks.
 .TP
 .B \-o
 Disables obfuscation of file names and extended attributes.


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] xfsprogs: explicitly cast troublesome types to match printf format specifiers
  2017-10-19  1:24 [PATCH 1/3] db: increase metadump's default overly long extent discard threshold Darrick J. Wong
@ 2017-10-19  1:25 ` Darrick J. Wong
  2017-10-20 11:23   ` Brian Foster
  2017-10-19  1:25 ` [PATCH 3/3] xfs_io: add new error injection knobs to inject command Darrick J. Wong
  2017-10-20 11:23 ` [PATCH 1/3] db: increase metadump's default overly long extent discard threshold Brian Foster
  2 siblings, 1 reply; 6+ messages in thread
From: Darrick J. Wong @ 2017-10-19  1:25 UTC (permalink / raw)
  To: sandeen, darrick.wong; +Cc: linux-xfs

From: Darrick J. Wong <darrick.wong@oracle.com>

Certain system-defined types (__u64, __s64, __nlink_t, __ino64_t,
__off64_t, __blkcnt64_t) don't have a consistent definition across
different architectures, so wherever we use a printf format specifier on
such a variable, we have to typecast the variable or else the compiler
will complain.

IOWs this fixes build warnings on ppc64le.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 io/fiemap.c          |   37 +++++++++++++++++++++----------------
 io/open.c            |    4 ++--
 io/stat.c            |   26 +++++++++++++-------------
 repair/attr_repair.c |    6 ++++--
 repair/dinode.c      |    3 ++-
 repair/phase6.c      |    4 ++--
 repair/scan.c        |    9 ++++++---
 7 files changed, 50 insertions(+), 39 deletions(-)


diff --git a/io/fiemap.c b/io/fiemap.c
index e6fd66d..bdcfacd 100644
--- a/io/fiemap.c
+++ b/io/fiemap.c
@@ -67,16 +67,18 @@ print_hole(
 
 	   if (plain) {
 		printf("\t%d: [%llu..%llu]: hole", cur_extent,
-		       llast, lstart - 1ULL);
+		       (unsigned long long)llast, lstart - 1ULL);
 		if (lflag)
-			printf(_(" %llu blocks\n"), lstart - llast);
+			printf(_(" %llu blocks\n"),
+			       (unsigned long long)lstart - llast);
 		else
 			printf("\n");
 	   } else {
-		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:", llast,
-			 lstart - 1ULL);
+		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:",
+			 (unsigned long long)llast, lstart - 1ULL);
 		printf("%4d: %-*s %-*s %*llu\n", cur_extent, foff_w, lbuf,
-		       boff_w, _("hole"), tot_w, lstart - llast);
+		       boff_w, _("hole"), tot_w,
+		       (unsigned long long)lstart - llast);
 	   }
 
 
@@ -125,12 +127,13 @@ print_verbose(
 	if (cur_extent == max_extents)
 		return 1;
 
-	snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:", lstart,
-		 lstart + len - 1ULL);
-	snprintf(bbuf, sizeof(bbuf), "%llu..%llu", block, block + len - 1ULL);
+	snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:",
+		 (unsigned long long)lstart, lstart + len - 1ULL);
+	snprintf(bbuf, sizeof(bbuf), "%llu..%llu",
+		 (unsigned long long)block, block + len - 1ULL);
 	snprintf(flgbuf, sizeof(flgbuf), "0x%x", extent->fe_flags);
 	printf("%4d: %-*s %-*s %*llu %*s\n", cur_extent, foff_w, lbuf,
-	       boff_w, bbuf, tot_w, len, flg_w, flgbuf);
+	       boff_w, bbuf, tot_w, (unsigned long long)len, flg_w, flgbuf);
 
 	return 2;
 }
@@ -161,11 +164,11 @@ print_plain(
 		return 1;
 
 	printf("\t%d: [%llu..%llu]: %llu..%llu", cur_extent,
-	       lstart, lstart + len - 1ULL, block,
-	       block + len - 1ULL);
+	       (unsigned long long)lstart, lstart + len - 1ULL,
+	       (unsigned long long)block, block + len - 1ULL);
 
 	if (lflag)
-		printf(_(" %llu blocks\n"), len);
+		printf(_(" %llu blocks\n"), (unsigned long long)len);
 	else
 		printf("\n");
 	return 2;
@@ -198,10 +201,12 @@ calc_print_format(
 		len = BTOBBT(extent->fe_length);
 		block = BTOBBT(extent->fe_physical);
 
-		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]", logical,
-			 logical + len - 1);
-		snprintf(bbuf, sizeof(bbuf), "%llu..%llu", block,
-			 block + len - 1);
+		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]",
+			 (unsigned long long)logical,
+			 (unsigned long long)logical + len - 1);
+		snprintf(bbuf, sizeof(bbuf), "%llu..%llu",
+			 (unsigned long long)block,
+			 (unsigned long long)block + len - 1);
 		*foff_w = max(*foff_w, strlen(lbuf));
 		*boff_w = max(*boff_w, strlen(bbuf));
 		*tot_w = max(*tot_w, numlen(len, 10));
diff --git a/io/open.c b/io/open.c
index f2ea7c3..2cce045 100644
--- a/io/open.c
+++ b/io/open.c
@@ -762,14 +762,14 @@ inode_f(
 
 	if (verbose && result_ino) {
 		/* Requested verbose and we have an answer */
-		printf("%llu:%d\n", result_ino,
+		printf("%llu:%d\n", (unsigned long long)result_ino,
 			result_ino > XFS_MAXINUMBER_32 ? 64 : 32);
 	} else if (userino == NULLFSINO) {
 		/* Just checking 32 or 64 bit presence, non-verbose */
 		printf("%d\n", result_ino > XFS_MAXINUMBER_32 ? 1 : 0);
 	} else {
 		/* We asked about a specific inode, non-verbose */
-		printf("%llu\n", result_ino);
+		printf("%llu\n", (unsigned long long)result_ino);
 	}
 
 	return 0;
diff --git a/io/stat.c b/io/stat.c
index 060ff83..b97cced 100644
--- a/io/stat.c
+++ b/io/stat.c
@@ -69,14 +69,14 @@ filetype(mode_t mode)
 static int
 dump_raw_stat(struct stat *st)
 {
-	printf("stat.blksize = %lu\n", st->st_blksize);
-	printf("stat.nlink = %lu\n", st->st_nlink);
+	printf("stat.blksize = %lu\n", (unsigned long)st->st_blksize);
+	printf("stat.nlink = %lu\n", (unsigned long)st->st_nlink);
 	printf("stat.uid = %u\n", st->st_uid);
 	printf("stat.gid = %u\n", st->st_gid);
 	printf("stat.mode: 0%o\n", st->st_mode);
-	printf("stat.ino = %lu\n", st->st_ino);
-	printf("stat.size = %lu\n", st->st_size);
-	printf("stat.blocks = %lu\n", st->st_blocks);
+	printf("stat.ino = %llu\n", (unsigned long long)st->st_ino);
+	printf("stat.size = %lld\n", (long long)st->st_size);
+	printf("stat.blocks = %lld\n", (long long)st->st_blocks);
 	printf("stat.atime.tv_sec = %ld\n", st->st_atim.tv_sec);
 	printf("stat.atime.tv_nsec = %ld\n", st->st_atim.tv_nsec);
 	printf("stat.ctime.tv_sec = %ld\n", st->st_ctim.tv_sec);
@@ -273,21 +273,21 @@ dump_raw_statx(struct statx *stx)
 {
 	printf("stat.mask = 0x%x\n", stx->stx_mask);
 	printf("stat.blksize = %u\n", stx->stx_blksize);
-	printf("stat.attributes = 0x%llx\n", stx->stx_attributes);
+	printf("stat.attributes = 0x%llx\n", (unsigned long long)stx->stx_attributes);
 	printf("stat.nlink = %u\n", stx->stx_nlink);
 	printf("stat.uid = %u\n", stx->stx_uid);
 	printf("stat.gid = %u\n", stx->stx_gid);
 	printf("stat.mode: 0%o\n", stx->stx_mode);
-	printf("stat.ino = %llu\n", stx->stx_ino);
-	printf("stat.size = %llu\n", stx->stx_size);
-	printf("stat.blocks = %llu\n", stx->stx_blocks);
-	printf("stat.atime.tv_sec = %lld\n", stx->stx_atime.tv_sec);
+	printf("stat.ino = %llu\n", (unsigned long long)stx->stx_ino);
+	printf("stat.size = %llu\n", (unsigned long long)stx->stx_size);
+	printf("stat.blocks = %llu\n", (unsigned long long)stx->stx_blocks);
+	printf("stat.atime.tv_sec = %lld\n", (long long)stx->stx_atime.tv_sec);
 	printf("stat.atime.tv_nsec = %d\n", stx->stx_atime.tv_nsec);
-	printf("stat.btime.tv_sec = %lld\n", stx->stx_btime.tv_sec);
+	printf("stat.btime.tv_sec = %lld\n", (long long)stx->stx_btime.tv_sec);
 	printf("stat.btime.tv_nsec = %d\n", stx->stx_btime.tv_nsec);
-	printf("stat.ctime.tv_sec = %lld\n", stx->stx_ctime.tv_sec);
+	printf("stat.ctime.tv_sec = %lld\n", (long long)stx->stx_ctime.tv_sec);
 	printf("stat.ctime.tv_nsec = %d\n", stx->stx_ctime.tv_nsec);
-	printf("stat.mtime.tv_sec = %lld\n", stx->stx_mtime.tv_sec);
+	printf("stat.mtime.tv_sec = %lld\n", (long long)stx->stx_mtime.tv_sec);
 	printf("stat.mtime.tv_nsec = %d\n", stx->stx_mtime.tv_nsec);
 	printf("stat.rdev_major = %u\n", stx->stx_rdev_major);
 	printf("stat.rdev_minor = %u\n", stx->stx_rdev_minor);
diff --git a/repair/attr_repair.c b/repair/attr_repair.c
index 9ec2231..8b1b8a7 100644
--- a/repair/attr_repair.c
+++ b/repair/attr_repair.c
@@ -943,14 +943,16 @@ __check_attr_header(
 	if (be64_to_cpu(info->owner) != ino) {
 		do_warn(
 _("expected owner inode %" PRIu64 ", got %llu, attr block %" PRIu64 "\n"),
-			ino, be64_to_cpu(info->owner), bp->b_bn);
+			ino, (unsigned long long)be64_to_cpu(info->owner),
+			bp->b_bn);
 		return 1;
 	}
 	/* verify block number */
 	if (be64_to_cpu(info->blkno) != bp->b_bn) {
 		do_warn(
 _("expected block %" PRIu64 ", got %llu, inode %" PRIu64 "attr block\n"),
-			bp->b_bn, be64_to_cpu(info->blkno), ino);
+			bp->b_bn, (unsigned long long)be64_to_cpu(info->blkno),
+			ino);
 		return 1;
 	}
 	/* verify uuid */
diff --git a/repair/dinode.c b/repair/dinode.c
index 15ba8cc..e7de6d4 100644
--- a/repair/dinode.c
+++ b/repair/dinode.c
@@ -2330,7 +2330,8 @@ process_dinode_int(xfs_mount_t *mp,
 			if (!uncertain)
 				do_warn(
 _("inode identifier %llu mismatch on inode %" PRIu64 "\n"),
-					be64_to_cpu(dino->di_ino), lino);
+					(unsigned long long)be64_to_cpu(dino->di_ino),
+					lino);
 			if (verify_mode)
 				return 1;
 			goto clear_bad_out;
diff --git a/repair/phase6.c b/repair/phase6.c
index 4279d2a..37505a8 100644
--- a/repair/phase6.c
+++ b/repair/phase6.c
@@ -1917,14 +1917,14 @@ __check_dir3_header(
 	if (be64_to_cpu(owner) != ino) {
 		do_warn(
 _("expected owner inode %" PRIu64 ", got %llu, directory block %" PRIu64 "\n"),
-			ino, be64_to_cpu(owner), bp->b_bn);
+			ino, (unsigned long long)be64_to_cpu(owner), bp->b_bn);
 		return 1;
 	}
 	/* verify block number */
 	if (be64_to_cpu(blkno) != bp->b_bn) {
 		do_warn(
 _("expected block %" PRIu64 ", got %llu, directory inode %" PRIu64 "\n"),
-			bp->b_bn, be64_to_cpu(blkno), ino);
+			bp->b_bn, (unsigned long long)be64_to_cpu(blkno), ino);
 		return 1;
 	}
 	/* verify uuid */
diff --git a/repair/scan.c b/repair/scan.c
index 9c0f2d6..22c7331 100644
--- a/repair/scan.c
+++ b/repair/scan.c
@@ -227,7 +227,9 @@ _("expected level %d got %d in inode %" PRIu64 ", (%s fork) bmbt block %" PRIu64
 		if (be64_to_cpu(block->bb_u.l.bb_owner) != ino) {
 			do_warn(
 _("expected owner inode %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"),
-				ino, be64_to_cpu(block->bb_u.l.bb_owner), bno);
+				ino,
+				(unsigned long long)be64_to_cpu(block->bb_u.l.bb_owner),
+				bno);
 			return 1;
 		}
 		/* verify block number */
@@ -236,7 +238,8 @@ _("expected owner inode %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"),
 			do_warn(
 _("expected block %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"),
 				XFS_FSB_TO_DADDR(mp, bno),
-				be64_to_cpu(block->bb_u.l.bb_blkno), bno);
+				(unsigned long long)be64_to_cpu(block->bb_u.l.bb_blkno),
+				bno);
 			return 1;
 		}
 		/* verify uuid */
@@ -1587,7 +1590,7 @@ import_single_ino_chunk(
 _("ir_holemask/ir_free mismatch, %s chunk %d/%u, holemask 0x%x free 0x%llx\n"),
 					inobt_name, agno, ino,
 					be16_to_cpu(rp->ir_u.sp.ir_holemask),
-					be64_to_cpu(rp->ir_free));
+					(unsigned long long)be64_to_cpu(rp->ir_free));
 				suspect++;
 			}
 			if (!suspect && ino_rec)


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] xfs_io: add new error injection knobs to inject command
  2017-10-19  1:24 [PATCH 1/3] db: increase metadump's default overly long extent discard threshold Darrick J. Wong
  2017-10-19  1:25 ` [PATCH 2/3] xfsprogs: explicitly cast troublesome types to match printf format specifiers Darrick J. Wong
@ 2017-10-19  1:25 ` Darrick J. Wong
  2017-10-20 11:23   ` Brian Foster
  2017-10-20 11:23 ` [PATCH 1/3] db: increase metadump's default overly long extent discard threshold Brian Foster
  2 siblings, 1 reply; 6+ messages in thread
From: Darrick J. Wong @ 2017-10-19  1:25 UTC (permalink / raw)
  To: sandeen, darrick.wong; +Cc: linux-xfs

From: Darrick J. Wong <darrick.wong@oracle.com>

Bring xfs_io's inject command up to date with the newest knobs.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 io/inject.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)


diff --git a/io/inject.c b/io/inject.c
index 25c7021..964ebfe 100644
--- a/io/inject.c
+++ b/io/inject.c
@@ -86,7 +86,13 @@ error_tag(char *name)
 		{ XFS_ERRTAG_BMAP_FINISH_ONE,		"bmap_finish_one" },
 #define XFS_ERRTAG_AG_RESV_CRITICAL			27
 		{ XFS_ERRTAG_AG_RESV_CRITICAL,		"ag_resv_critical" },
-#define XFS_ERRTAG_MAX                                  28
+#define XFS_ERRTAG_DROP_WRITES				28
+		{ XFS_ERRTAG_DROP_WRITES,		"drop_writes" },
+#define XFS_ERRTAG_LOG_BAD_CRC				29
+		{ XFS_ERRTAG_LOG_BAD_CRC,		"log_bad_crc" },
+#define XFS_ERRTAG_LOG_ITEM_PIN				30
+		{ XFS_ERRTAG_LOG_ITEM_PIN,		"log_item_pin" },
+#define XFS_ERRTAG_MAX                                  31
 		{ XFS_ERRTAG_MAX,			NULL }
 	};
 	int	count;


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] db: increase metadump's default overly long extent discard threshold
  2017-10-19  1:24 [PATCH 1/3] db: increase metadump's default overly long extent discard threshold Darrick J. Wong
  2017-10-19  1:25 ` [PATCH 2/3] xfsprogs: explicitly cast troublesome types to match printf format specifiers Darrick J. Wong
  2017-10-19  1:25 ` [PATCH 3/3] xfs_io: add new error injection knobs to inject command Darrick J. Wong
@ 2017-10-20 11:23 ` Brian Foster
  2 siblings, 0 replies; 6+ messages in thread
From: Brian Foster @ 2017-10-20 11:23 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: sandeen, linux-xfs, Carlos Maiolino

On Wed, Oct 18, 2017 at 06:24:51PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> Back in 88b8e1d6d7 ("Make xfs_metadump more robust against bad data"),
> metadump grew the ability to ignore a directory extent if it was longer
> than 20 blocks.  Presumably this was to protect metadump from dumping
> absurdly long extents resulting from bmbt corruption, but it's certainly
> possible to create a directory with an extent longer than 20 blocks.
> Hilariously, the discards happen with no warning unless the caller
> explicitly set -w.
> 
> This was raised to 1000 blocks in 7431d134fe8 ("Increase default maximum
> extent size for xfs_metadump when copying..."), but it's still possible
> to create a directory with an extent longer than 1000 blocks.
> 
> Increase the threshold to MAXEXTLEN blocks because it's totally valid
> for the filesystem to create extents up to that length.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
> ---
>  db/metadump.c           |    2 +-
>  man/man8/xfs_metadump.8 |    2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> 
> diff --git a/db/metadump.c b/db/metadump.c
> index 6dd06c3..8ffb90f 100644
> --- a/db/metadump.c
> +++ b/db/metadump.c
> @@ -32,7 +32,7 @@
>  #include "field.h"
>  #include "dir2.h"
>  
> -#define DEFAULT_MAX_EXT_SIZE	1000
> +#define DEFAULT_MAX_EXT_SIZE	MAXEXTLEN
>  

Perhaps we should just kill DEFAULT_MAX_EXT_SIZE and replace its use
with MAXEXTLEN..? Looks fine either way:

Reviewed-by: Brian Foster <bfoster@redhat.com>

>  /*
>   * It's possible that multiple files in a directory (or attributes
> diff --git a/man/man8/xfs_metadump.8 b/man/man8/xfs_metadump.8
> index 3731d6a..7207c20 100644
> --- a/man/man8/xfs_metadump.8
> +++ b/man/man8/xfs_metadump.8
> @@ -114,7 +114,7 @@ copied.
>  .B \-m
>  Set the maximum size of an allowed metadata extent.  Extremely large metadata
>  extents are likely to be corrupt, and will be skipped if they exceed
> -this value.  The default size is 1000 blocks.
> +this value.  The default size is 2097151 blocks.
>  .TP
>  .B \-o
>  Disables obfuscation of file names and extended attributes.
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/3] xfsprogs: explicitly cast troublesome types to match printf format specifiers
  2017-10-19  1:25 ` [PATCH 2/3] xfsprogs: explicitly cast troublesome types to match printf format specifiers Darrick J. Wong
@ 2017-10-20 11:23   ` Brian Foster
  0 siblings, 0 replies; 6+ messages in thread
From: Brian Foster @ 2017-10-20 11:23 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: sandeen, linux-xfs

On Wed, Oct 18, 2017 at 06:25:00PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> Certain system-defined types (__u64, __s64, __nlink_t, __ino64_t,
> __off64_t, __blkcnt64_t) don't have a consistent definition across
> different architectures, so wherever we use a printf format specifier on
> such a variable, we have to typecast the variable or else the compiler
> will complain.
> 
> IOWs this fixes build warnings on ppc64le.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---

Reviewed-by: Brian Foster <bfoster@redhat.com>

>  io/fiemap.c          |   37 +++++++++++++++++++++----------------
>  io/open.c            |    4 ++--
>  io/stat.c            |   26 +++++++++++++-------------
>  repair/attr_repair.c |    6 ++++--
>  repair/dinode.c      |    3 ++-
>  repair/phase6.c      |    4 ++--
>  repair/scan.c        |    9 ++++++---
>  7 files changed, 50 insertions(+), 39 deletions(-)
> 
> 
> diff --git a/io/fiemap.c b/io/fiemap.c
> index e6fd66d..bdcfacd 100644
> --- a/io/fiemap.c
> +++ b/io/fiemap.c
> @@ -67,16 +67,18 @@ print_hole(
>  
>  	   if (plain) {
>  		printf("\t%d: [%llu..%llu]: hole", cur_extent,
> -		       llast, lstart - 1ULL);
> +		       (unsigned long long)llast, lstart - 1ULL);
>  		if (lflag)
> -			printf(_(" %llu blocks\n"), lstart - llast);
> +			printf(_(" %llu blocks\n"),
> +			       (unsigned long long)lstart - llast);
>  		else
>  			printf("\n");
>  	   } else {
> -		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:", llast,
> -			 lstart - 1ULL);
> +		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:",
> +			 (unsigned long long)llast, lstart - 1ULL);
>  		printf("%4d: %-*s %-*s %*llu\n", cur_extent, foff_w, lbuf,
> -		       boff_w, _("hole"), tot_w, lstart - llast);
> +		       boff_w, _("hole"), tot_w,
> +		       (unsigned long long)lstart - llast);
>  	   }
>  
>  
> @@ -125,12 +127,13 @@ print_verbose(
>  	if (cur_extent == max_extents)
>  		return 1;
>  
> -	snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:", lstart,
> -		 lstart + len - 1ULL);
> -	snprintf(bbuf, sizeof(bbuf), "%llu..%llu", block, block + len - 1ULL);
> +	snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]:",
> +		 (unsigned long long)lstart, lstart + len - 1ULL);
> +	snprintf(bbuf, sizeof(bbuf), "%llu..%llu",
> +		 (unsigned long long)block, block + len - 1ULL);
>  	snprintf(flgbuf, sizeof(flgbuf), "0x%x", extent->fe_flags);
>  	printf("%4d: %-*s %-*s %*llu %*s\n", cur_extent, foff_w, lbuf,
> -	       boff_w, bbuf, tot_w, len, flg_w, flgbuf);
> +	       boff_w, bbuf, tot_w, (unsigned long long)len, flg_w, flgbuf);
>  
>  	return 2;
>  }
> @@ -161,11 +164,11 @@ print_plain(
>  		return 1;
>  
>  	printf("\t%d: [%llu..%llu]: %llu..%llu", cur_extent,
> -	       lstart, lstart + len - 1ULL, block,
> -	       block + len - 1ULL);
> +	       (unsigned long long)lstart, lstart + len - 1ULL,
> +	       (unsigned long long)block, block + len - 1ULL);
>  
>  	if (lflag)
> -		printf(_(" %llu blocks\n"), len);
> +		printf(_(" %llu blocks\n"), (unsigned long long)len);
>  	else
>  		printf("\n");
>  	return 2;
> @@ -198,10 +201,12 @@ calc_print_format(
>  		len = BTOBBT(extent->fe_length);
>  		block = BTOBBT(extent->fe_physical);
>  
> -		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]", logical,
> -			 logical + len - 1);
> -		snprintf(bbuf, sizeof(bbuf), "%llu..%llu", block,
> -			 block + len - 1);
> +		snprintf(lbuf, sizeof(lbuf), "[%llu..%llu]",
> +			 (unsigned long long)logical,
> +			 (unsigned long long)logical + len - 1);
> +		snprintf(bbuf, sizeof(bbuf), "%llu..%llu",
> +			 (unsigned long long)block,
> +			 (unsigned long long)block + len - 1);
>  		*foff_w = max(*foff_w, strlen(lbuf));
>  		*boff_w = max(*boff_w, strlen(bbuf));
>  		*tot_w = max(*tot_w, numlen(len, 10));
> diff --git a/io/open.c b/io/open.c
> index f2ea7c3..2cce045 100644
> --- a/io/open.c
> +++ b/io/open.c
> @@ -762,14 +762,14 @@ inode_f(
>  
>  	if (verbose && result_ino) {
>  		/* Requested verbose and we have an answer */
> -		printf("%llu:%d\n", result_ino,
> +		printf("%llu:%d\n", (unsigned long long)result_ino,
>  			result_ino > XFS_MAXINUMBER_32 ? 64 : 32);
>  	} else if (userino == NULLFSINO) {
>  		/* Just checking 32 or 64 bit presence, non-verbose */
>  		printf("%d\n", result_ino > XFS_MAXINUMBER_32 ? 1 : 0);
>  	} else {
>  		/* We asked about a specific inode, non-verbose */
> -		printf("%llu\n", result_ino);
> +		printf("%llu\n", (unsigned long long)result_ino);
>  	}
>  
>  	return 0;
> diff --git a/io/stat.c b/io/stat.c
> index 060ff83..b97cced 100644
> --- a/io/stat.c
> +++ b/io/stat.c
> @@ -69,14 +69,14 @@ filetype(mode_t mode)
>  static int
>  dump_raw_stat(struct stat *st)
>  {
> -	printf("stat.blksize = %lu\n", st->st_blksize);
> -	printf("stat.nlink = %lu\n", st->st_nlink);
> +	printf("stat.blksize = %lu\n", (unsigned long)st->st_blksize);
> +	printf("stat.nlink = %lu\n", (unsigned long)st->st_nlink);
>  	printf("stat.uid = %u\n", st->st_uid);
>  	printf("stat.gid = %u\n", st->st_gid);
>  	printf("stat.mode: 0%o\n", st->st_mode);
> -	printf("stat.ino = %lu\n", st->st_ino);
> -	printf("stat.size = %lu\n", st->st_size);
> -	printf("stat.blocks = %lu\n", st->st_blocks);
> +	printf("stat.ino = %llu\n", (unsigned long long)st->st_ino);
> +	printf("stat.size = %lld\n", (long long)st->st_size);
> +	printf("stat.blocks = %lld\n", (long long)st->st_blocks);
>  	printf("stat.atime.tv_sec = %ld\n", st->st_atim.tv_sec);
>  	printf("stat.atime.tv_nsec = %ld\n", st->st_atim.tv_nsec);
>  	printf("stat.ctime.tv_sec = %ld\n", st->st_ctim.tv_sec);
> @@ -273,21 +273,21 @@ dump_raw_statx(struct statx *stx)
>  {
>  	printf("stat.mask = 0x%x\n", stx->stx_mask);
>  	printf("stat.blksize = %u\n", stx->stx_blksize);
> -	printf("stat.attributes = 0x%llx\n", stx->stx_attributes);
> +	printf("stat.attributes = 0x%llx\n", (unsigned long long)stx->stx_attributes);
>  	printf("stat.nlink = %u\n", stx->stx_nlink);
>  	printf("stat.uid = %u\n", stx->stx_uid);
>  	printf("stat.gid = %u\n", stx->stx_gid);
>  	printf("stat.mode: 0%o\n", stx->stx_mode);
> -	printf("stat.ino = %llu\n", stx->stx_ino);
> -	printf("stat.size = %llu\n", stx->stx_size);
> -	printf("stat.blocks = %llu\n", stx->stx_blocks);
> -	printf("stat.atime.tv_sec = %lld\n", stx->stx_atime.tv_sec);
> +	printf("stat.ino = %llu\n", (unsigned long long)stx->stx_ino);
> +	printf("stat.size = %llu\n", (unsigned long long)stx->stx_size);
> +	printf("stat.blocks = %llu\n", (unsigned long long)stx->stx_blocks);
> +	printf("stat.atime.tv_sec = %lld\n", (long long)stx->stx_atime.tv_sec);
>  	printf("stat.atime.tv_nsec = %d\n", stx->stx_atime.tv_nsec);
> -	printf("stat.btime.tv_sec = %lld\n", stx->stx_btime.tv_sec);
> +	printf("stat.btime.tv_sec = %lld\n", (long long)stx->stx_btime.tv_sec);
>  	printf("stat.btime.tv_nsec = %d\n", stx->stx_btime.tv_nsec);
> -	printf("stat.ctime.tv_sec = %lld\n", stx->stx_ctime.tv_sec);
> +	printf("stat.ctime.tv_sec = %lld\n", (long long)stx->stx_ctime.tv_sec);
>  	printf("stat.ctime.tv_nsec = %d\n", stx->stx_ctime.tv_nsec);
> -	printf("stat.mtime.tv_sec = %lld\n", stx->stx_mtime.tv_sec);
> +	printf("stat.mtime.tv_sec = %lld\n", (long long)stx->stx_mtime.tv_sec);
>  	printf("stat.mtime.tv_nsec = %d\n", stx->stx_mtime.tv_nsec);
>  	printf("stat.rdev_major = %u\n", stx->stx_rdev_major);
>  	printf("stat.rdev_minor = %u\n", stx->stx_rdev_minor);
> diff --git a/repair/attr_repair.c b/repair/attr_repair.c
> index 9ec2231..8b1b8a7 100644
> --- a/repair/attr_repair.c
> +++ b/repair/attr_repair.c
> @@ -943,14 +943,16 @@ __check_attr_header(
>  	if (be64_to_cpu(info->owner) != ino) {
>  		do_warn(
>  _("expected owner inode %" PRIu64 ", got %llu, attr block %" PRIu64 "\n"),
> -			ino, be64_to_cpu(info->owner), bp->b_bn);
> +			ino, (unsigned long long)be64_to_cpu(info->owner),
> +			bp->b_bn);
>  		return 1;
>  	}
>  	/* verify block number */
>  	if (be64_to_cpu(info->blkno) != bp->b_bn) {
>  		do_warn(
>  _("expected block %" PRIu64 ", got %llu, inode %" PRIu64 "attr block\n"),
> -			bp->b_bn, be64_to_cpu(info->blkno), ino);
> +			bp->b_bn, (unsigned long long)be64_to_cpu(info->blkno),
> +			ino);
>  		return 1;
>  	}
>  	/* verify uuid */
> diff --git a/repair/dinode.c b/repair/dinode.c
> index 15ba8cc..e7de6d4 100644
> --- a/repair/dinode.c
> +++ b/repair/dinode.c
> @@ -2330,7 +2330,8 @@ process_dinode_int(xfs_mount_t *mp,
>  			if (!uncertain)
>  				do_warn(
>  _("inode identifier %llu mismatch on inode %" PRIu64 "\n"),
> -					be64_to_cpu(dino->di_ino), lino);
> +					(unsigned long long)be64_to_cpu(dino->di_ino),
> +					lino);
>  			if (verify_mode)
>  				return 1;
>  			goto clear_bad_out;
> diff --git a/repair/phase6.c b/repair/phase6.c
> index 4279d2a..37505a8 100644
> --- a/repair/phase6.c
> +++ b/repair/phase6.c
> @@ -1917,14 +1917,14 @@ __check_dir3_header(
>  	if (be64_to_cpu(owner) != ino) {
>  		do_warn(
>  _("expected owner inode %" PRIu64 ", got %llu, directory block %" PRIu64 "\n"),
> -			ino, be64_to_cpu(owner), bp->b_bn);
> +			ino, (unsigned long long)be64_to_cpu(owner), bp->b_bn);
>  		return 1;
>  	}
>  	/* verify block number */
>  	if (be64_to_cpu(blkno) != bp->b_bn) {
>  		do_warn(
>  _("expected block %" PRIu64 ", got %llu, directory inode %" PRIu64 "\n"),
> -			bp->b_bn, be64_to_cpu(blkno), ino);
> +			bp->b_bn, (unsigned long long)be64_to_cpu(blkno), ino);
>  		return 1;
>  	}
>  	/* verify uuid */
> diff --git a/repair/scan.c b/repair/scan.c
> index 9c0f2d6..22c7331 100644
> --- a/repair/scan.c
> +++ b/repair/scan.c
> @@ -227,7 +227,9 @@ _("expected level %d got %d in inode %" PRIu64 ", (%s fork) bmbt block %" PRIu64
>  		if (be64_to_cpu(block->bb_u.l.bb_owner) != ino) {
>  			do_warn(
>  _("expected owner inode %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"),
> -				ino, be64_to_cpu(block->bb_u.l.bb_owner), bno);
> +				ino,
> +				(unsigned long long)be64_to_cpu(block->bb_u.l.bb_owner),
> +				bno);
>  			return 1;
>  		}
>  		/* verify block number */
> @@ -236,7 +238,8 @@ _("expected owner inode %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"),
>  			do_warn(
>  _("expected block %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"),
>  				XFS_FSB_TO_DADDR(mp, bno),
> -				be64_to_cpu(block->bb_u.l.bb_blkno), bno);
> +				(unsigned long long)be64_to_cpu(block->bb_u.l.bb_blkno),
> +				bno);
>  			return 1;
>  		}
>  		/* verify uuid */
> @@ -1587,7 +1590,7 @@ import_single_ino_chunk(
>  _("ir_holemask/ir_free mismatch, %s chunk %d/%u, holemask 0x%x free 0x%llx\n"),
>  					inobt_name, agno, ino,
>  					be16_to_cpu(rp->ir_u.sp.ir_holemask),
> -					be64_to_cpu(rp->ir_free));
> +					(unsigned long long)be64_to_cpu(rp->ir_free));
>  				suspect++;
>  			}
>  			if (!suspect && ino_rec)
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] xfs_io: add new error injection knobs to inject command
  2017-10-19  1:25 ` [PATCH 3/3] xfs_io: add new error injection knobs to inject command Darrick J. Wong
@ 2017-10-20 11:23   ` Brian Foster
  0 siblings, 0 replies; 6+ messages in thread
From: Brian Foster @ 2017-10-20 11:23 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: sandeen, linux-xfs

On Wed, Oct 18, 2017 at 06:25:06PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> Bring xfs_io's inject command up to date with the newest knobs.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---

Reviewed-by: Brian Foster <bfoster@redhat.com>

>  io/inject.c |    8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> 
> diff --git a/io/inject.c b/io/inject.c
> index 25c7021..964ebfe 100644
> --- a/io/inject.c
> +++ b/io/inject.c
> @@ -86,7 +86,13 @@ error_tag(char *name)
>  		{ XFS_ERRTAG_BMAP_FINISH_ONE,		"bmap_finish_one" },
>  #define XFS_ERRTAG_AG_RESV_CRITICAL			27
>  		{ XFS_ERRTAG_AG_RESV_CRITICAL,		"ag_resv_critical" },
> -#define XFS_ERRTAG_MAX                                  28
> +#define XFS_ERRTAG_DROP_WRITES				28
> +		{ XFS_ERRTAG_DROP_WRITES,		"drop_writes" },
> +#define XFS_ERRTAG_LOG_BAD_CRC				29
> +		{ XFS_ERRTAG_LOG_BAD_CRC,		"log_bad_crc" },
> +#define XFS_ERRTAG_LOG_ITEM_PIN				30
> +		{ XFS_ERRTAG_LOG_ITEM_PIN,		"log_item_pin" },
> +#define XFS_ERRTAG_MAX                                  31
>  		{ XFS_ERRTAG_MAX,			NULL }
>  	};
>  	int	count;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-10-20 11:23 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-19  1:24 [PATCH 1/3] db: increase metadump's default overly long extent discard threshold Darrick J. Wong
2017-10-19  1:25 ` [PATCH 2/3] xfsprogs: explicitly cast troublesome types to match printf format specifiers Darrick J. Wong
2017-10-20 11:23   ` Brian Foster
2017-10-19  1:25 ` [PATCH 3/3] xfs_io: add new error injection knobs to inject command Darrick J. Wong
2017-10-20 11:23   ` Brian Foster
2017-10-20 11:23 ` [PATCH 1/3] db: increase metadump's default overly long extent discard threshold Brian Foster

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.