+++ /dev/null
---- utils/fstype.c.old 2005-09-13 14:50:59.000000000 -0400
-+++ utils/fstype.c 2005-09-13 17:42:33.000000000 -0400
-@@ -7,7 +7,7 @@
- * FSSIZE - filesystem size (if known)
- *
- * We currently detect (in order):
-- * gzip, cramfs, romfs, xfs, minix, ext3, ext2, reiserfs
-+ * gzip, cramfs, romfs, xfs, minix, ext3, ext2, reiserfs, jfs
- *
- * MINIX, ext3 and Reiserfs bits are currently untested.
- */
-@@ -29,6 +29,12 @@
- #include "xfs_sb.h"
-
- /*
-+ * Slightly cleaned up version of jfs_superblock to
-+ * avoid pulling in other kernel header files.
-+ */
-+#include "jfs_superblock.h"
-+
-+/*
- * reiserfs_fs.h is too sick to include directly.
- * Use a cleaned up version.
- */
-@@ -174,6 +180,19 @@
- return 0;
- }
-
-+static int jfs_image(const unsigned char *buf, unsigned long *blocks)
-+{
-+ const struct jfs_superblock *sb =
-+ (const struct jfs_superblock *)buf;
-+
-+ if (! strncmp(sb->s_magic,JFS_MAGIC, 4)) {
-+ /* 512 is the VFS Block size */
-+ *blocks = __le32_to_cpu(sb->s_size) * 512;;
-+ return 1;
-+ }
-+ return 0;
-+}
-+
- struct imagetype {
- off_t block;
- const char name[12];
-@@ -189,7 +208,8 @@
- { 1, "ext3", ext3_image },
- { 1, "ext2", ext2_image },
- { 8, "reiserfs", reiserfs_image },
-- { 64, "reiserfs", reiserfs_image }
-+ { 64, "reiserfs", reiserfs_image },
-+ { 32, "jfs", jfs_image }
- };
-
- int main(int argc, char *argv[])
---- /dev/null 2005-09-13 04:36:56.252809544 -0400
-+++ utils/jfs_superblock.h 2005-09-13 15:08:00.000000000 -0400
-@@ -0,0 +1,114 @@
-+/*
-+ * Copyright (C) International Business Machines Corp., 2000-2003
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
-+ * the GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+#ifndef _H_JFS_SUPERBLOCK
-+#define _H_JFS_SUPERBLOCK
-+
-+struct timestruc_t {
-+ __le32 tv_sec;
-+ __le32 tv_nsec;
-+};
-+
-+/*
-+ * make the magic number something a human could read
-+ */
-+#define JFS_MAGIC "JFS1" /* Magic word */
-+
-+#define JFS_VERSION 2 /* Version number: Version 2 */
-+
-+#define LV_NAME_SIZE 11 /* MUST BE 11 for OS/2 boot sector */
-+
-+/*
-+ * aggregate superblock
-+ *
-+ * The name superblock is too close to super_block, so the name has been
-+ * changed to jfs_superblock. The utilities are still using the old name.
-+ */
-+struct jfs_superblock {
-+ char s_magic[4]; /* 4: magic number */
-+ __le32 s_version; /* 4: version number */
-+
-+ __le64 s_size; /* 8: aggregate size in hardware/LVM blocks;
-+ * VFS: number of blocks
-+ */
-+ __le32 s_bsize; /* 4: aggregate block size in bytes;
-+ * VFS: fragment size
-+ */
-+ __le16 s_l2bsize; /* 2: log2 of s_bsize */
-+ __le16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */
-+ __le32 s_pbsize; /* 4: hardware/LVM block size in bytes */
-+ __le16 s_l2pbsize; /* 2: log2 of s_pbsize */
-+ __le16 pad; /* 2: padding necessary for alignment */
-+
-+ __le32 s_agsize; /* 4: allocation group size in aggr. blocks */
-+
-+ __le32 s_flag; /* 4: aggregate attributes:
-+ * see jfs_filsys.h
-+ */
-+ __le32 s_state; /* 4: mount/unmount/recovery state:
-+ * see jfs_filsys.h
-+ */
-+ __le32 s_compress; /* 4: > 0 if data compression */
-+
-+ __le64 s_ait2; /* 8: first extent of secondary
-+ * aggregate inode table
-+ */
-+
-+ __le64 s_aim2; /* 8: first extent of secondary
-+ * aggregate inode map
-+ */
-+ __le32 s_logdev; /* 4: device address of log */
-+ __le32 s_logserial; /* 4: log serial number at aggregate mount */
-+ __le64 s_logpxd; /* 8: inline log extent */
-+
-+ __le64 s_fsckpxd; /* 8: inline fsck work space extent */
-+
-+ struct timestruc_t s_time; /* 8: time last updated */
-+
-+ __le32 s_fsckloglen; /* 4: Number of filesystem blocks reserved for
-+ * the fsck service log.
-+ * N.B. These blocks are divided among the
-+ * versions kept. This is not a per
-+ * version size.
-+ * N.B. These blocks are included in the
-+ * length field of s_fsckpxd.
-+ */
-+ char s_fscklog; /* 1: which fsck service log is most recent
-+ * 0 => no service log data yet
-+ * 1 => the first one
-+ * 2 => the 2nd one
-+ */
-+ char s_fpack[11]; /* 11: file system volume name
-+ * N.B. This must be 11 bytes to
-+ * conform with the OS/2 BootSector
-+ * requirements
-+ * Only used when s_version is 1
-+ */
-+
-+ /* extendfs() parameter under s_state & FM_EXTENDFS */
-+ __le64 s_xsize; /* 8: extendfs s_size */
-+ __le64 s_xfsckpxd; /* 8: extendfs fsckpxd */
-+ __le64 s_xlogpxd; /* 8: extendfs logpxd */
-+ /* - 128 byte boundary - */
-+
-+ char s_uuid[16]; /* 16: 128-bit uuid for volume */
-+ char s_label[16]; /* 16: volume label */
-+ char s_loguuid[16]; /* 16: 128-bit uuid for log device */
-+
-+};
-+
-+#endif /*_H_JFS_SUPERBLOCK */