REVIEW: 031 QA failure with xfs_repair
QA 030 and 031 are failing with xfs_repair as the "zeroed log" is different
on IRIX and Linux.
xfs_repair must be coded to handle the different platform log formats.
==========================
Need a review please:
383 -> p_rdiff -um libxfs libxlog
========================================================================
===xfsprogs/libxfs/darwin.c
========================================================================
===
--- /usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/darwin.c_1.12 Mon Jan
15 17:30:37 2007
+++ xfsprogs/libxfs/darwin.c Mon Jan 15 16:53:25 2007
@@ -22,6 +22,7 @@
#include <sys/ioctl.h>
#include <xfs/libxfs.h>
+int platform_has_uuid = 0;
extern char *progname;
int
========================================================================
===xfsprogs/libxfs/freebsd.c
========================================================================
===
--- /usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/freebsd.c_1.15 Mon Jan
15 17:30:37 2007
+++ xfsprogs/libxfs/freebsd.c Mon Jan 15 16:53:35 2007
@@ -22,6 +22,7 @@
#include <sys/mount.h>
#include <sys/ioctl.h>
+int platform_has_uuid = 0;
extern char *progname;
int
========================================================================
===xfsprogs/libxfs/init.h
========================================================================
===
--- /usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/init.h_1.12 Mon Jan
15 17:30:37 2007
+++ xfsprogs/libxfs/init.h Mon Jan 15 16:52:09 2007
@@ -34,5 +34,6 @@
extern int platform_align_blockdev (void);
extern int platform_aio_init (int aio_count);
extern int platform_nproc(void);
+extern int platform_has_uuid;
#endif /* LIBXFS_INIT_H */
========================================================================
===xfsprogs/libxfs/irix.c
========================================================================
===
--- /usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/irix.c_1.13 Mon Jan
15 17:30:37 2007
+++ xfsprogs/libxfs/irix.c Mon Jan 15 16:53:49 2007
@@ -21,6 +21,7 @@
#include <diskinfo.h>
#include <sys/sysmp.h>
+int platform_has_uuid = 0;
extern char *progname;
extern __int64_t findsize(char *);
========================================================================
===xfsprogs/libxfs/linux.c
========================================================================
===
--- /usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/linux.c_1.16 Mon Jan
15 17:30:37 2007
+++ xfsprogs/libxfs/linux.c Mon Jan 15 16:53:10 2007
@@ -26,6 +26,7 @@
#include <sys/mount.h>
#include <sys/ioctl.h>
+int platform_has_uuid = 1;
extern char *progname;
static int max_block_alignment;
========================================================================
===xfsprogs/libxlog/xfs_log_recover.c
========================================================================
===
--- /usr/tmp/TmpDir.5868489-0/xfsprogs/libxlog/xfs_log_recover.c_1.30 Mon Jan 15 17:30:37 2007
+++ xfsprogs/libxlog/xfs_log_recover.c Mon Jan 15 16:54:50 2007 @@ -258,6 +258,7 @@
uint first_half_cycle, last_half_cycle;
uint stop_on_cycle;
int error, log_bbnum = log->l_logBBsize;
+ extern int platform_has_uuid; /* Is the end of the log device zeroed? */
if ((error = xlog_find_zeroed(log, &first_blk)) == -1) {
@@ -264,7 +265,7 @@
*return_head_blk = first_blk;
/* Is the whole lot zeroed? */
- if (!first_blk) {
+ if (!first_blk && platform_has_uuid) {
/* Linux XFS shouldn't generate totally zeroedlogs -
* mkfs etc write a dummy unmount record to a
fresh
* log so we can store the uuid in there
Quoted 7 lines · Barry Naujok
QA 030 and 031 are failing with
xfs_repairas the "zeroed log" is different
on IRIX and Linux.
xfs_repairmust be coded to handle the different platform log formats.
Looks ok.
Cheers,
Dave.
Signature · 3 lines
Dave Chinner Principal Engineer SGI Australian Software Group
Well, Dave has already replied, but here is the patch again with out the line break crap and tabs intact.
Quoted 12 lines
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Barry Naujok
Sent: Tuesday, 16 January 2007 11:51 AM
To: [email protected]
Subject: FW: REVIEW: 031 QA failure withxfs_repairQA 030 and 031 are failing with
xfs_repairas the "zeroed log" is different
on IRIX and Linux.
Quoted 6 lines
xfs_repairmust be coded to handle the different platform log formats.==========================
Need a review please:
(see attached)
===========================================================================xfsprogs/libxfs/darwin.c
===========================================================================
libxfs/darwin.c Mon Jan 15 16:53:25 2007 renamed from usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/darwin.c_1.12 Mon Jan 15 17:30:37 2007 +1 -0
@@ -22,6 +22,7 @@ #include <sys/ioctl.h> #include <xfs/libxfs.h> +int platform_has_uuid = 0; extern char *progname; int
===========================================================================xfsprogs/libxfs/freebsd.c
===========================================================================
libxfs/freebsd.c Mon Jan 15 16:53:35 2007 renamed from usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/freebsd.c_1.15 Mon Jan 15 17:30:37 2007 +1 -0
@@ -22,6 +22,7 @@ #include <sys/mount.h> #include <sys/ioctl.h> +int platform_has_uuid = 0; extern char *progname; int
===========================================================================xfsprogs/libxfs/init.h
===========================================================================
libxfs/init.h Mon Jan 15 16:52:09 2007 renamed from usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/init.h_1.12 Mon Jan 15 17:30:37 2007 +1 -0
@@ -34,5 +34,6 @@ extern int platform_align_blockdev (void); extern int platform_aio_init (int aio_count); extern int platform_nproc(void); +extern int platform_has_uuid; #endif /* LIBXFS_INIT_H */
===========================================================================xfsprogs/libxfs/irix.c
===========================================================================
libxfs/irix.c Mon Jan 15 16:53:49 2007 renamed from usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/irix.c_1.13 Mon Jan 15 17:30:37 2007 +1 -0
@@ -21,6 +21,7 @@ #include <diskinfo.h> #include <sys/sysmp.h> +int platform_has_uuid = 0; extern char *progname; extern __int64_t findsize(char *);
===========================================================================xfsprogs/libxfs/linux.c
===========================================================================
libxfs/linux.c Mon Jan 15 16:53:10 2007 renamed from usr/tmp/TmpDir.5868489-0/xfsprogs/libxfs/linux.c_1.16 Mon Jan 15 17:30:37 2007 +1 -0
@@ -26,6 +26,7 @@ #include <sys/mount.h> #include <sys/ioctl.h> +int platform_has_uuid = 1; extern char *progname; static int max_block_alignment;
===========================================================================xfsprogs/libxlog/xfs_log_recover.c
===========================================================================
libxlog/xfs_log_recover.c Mon Jan 15 16:54:50 2007 renamed from usr/tmp/TmpDir.5868489-0/xfsprogs/libxlog/xfs_log_recover.c_1.30 Mon Jan 15 17:30:37 2007 +2 -1
@@ -258,6 +258,7 @@ uint first_half_cycle, last_half_cycle; uint stop_on_cycle; int error, log_bbnum = log->l_logBBsize; + extern int platform_has_uuid; /* Is the end of the log device zeroed? */ if ((error = xlog_find_zeroed(log, &first_blk)) == -1) {
@@ -264,7 +265,7 @@ *return_head_blk = first_blk; /* Is the whole lot zeroed? */ - if (!first_blk) { + if (!first_blk && platform_has_uuid) { /* Linux XFS shouldn't generate totally zeroed logs - * mkfs etc write a dummy unmount record to a fresh * log so we can store the uuid in there