WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [LIBFSIMAGE] Support 256 byte inodes on e

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [LIBFSIMAGE] Support 256 byte inodes on ext3
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 22 Apr 2008 07:10:11 -0700
Delivery-date: Tue, 22 Apr 2008 07:10:20 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1208335544 -3600
# Node ID c777e572a4672f1ebddd95e95b94ca1e1e9e01ca
# Parent  c3efeb3095ac8699d564cdbbe91ca214afe8e4d3
[LIBFSIMAGE] Support 256 byte inodes on ext3

Patch taken from Debian grub package version 0.97-32.
See http://bugs.debian.org/463236 & http://bugs.debian.org/463123

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
 tools/libfsimage/ext2fs/fsys_ext2fs.c |   61 ++++++++++++++++++++++++++++++----
 1 files changed, 54 insertions(+), 7 deletions(-)

diff -r c3efeb3095ac -r c777e572a467 tools/libfsimage/ext2fs/fsys_ext2fs.c
--- a/tools/libfsimage/ext2fs/fsys_ext2fs.c     Wed Apr 16 09:32:45 2008 +0100
+++ b/tools/libfsimage/ext2fs/fsys_ext2fs.c     Wed Apr 16 09:45:44 2008 +0100
@@ -77,7 +77,52 @@ struct ext2_super_block
     __u32 s_rev_level;         /* Revision level */
     __u16 s_def_resuid;                /* Default uid for reserved blocks */
     __u16 s_def_resgid;                /* Default gid for reserved blocks */
-    __u32 s_reserved[235];     /* Padding to the end of the block */
+    /*
+     * These fields are for EXT2_DYNAMIC_REV superblocks only.
+     *
+     * Note: the difference between the compatible feature set and
+     * the incompatible feature set is that if there is a bit set
+     * in the incompatible feature set that the kernel doesn't
+     * know about, it should refuse to mount the filesystem.
+     *
+     * e2fsck's requirements are more strict; if it doesn't know
+     * about a feature in either the compatible or incompatible
+     * feature set, it must abort and not try to meddle with
+     * things it doesn't understand...
+     */
+    __u32 s_first_ino;         /* First non-reserved inode */
+    __u16 s_inode_size;                /* size of inode structure */
+    __u16 s_block_group_nr;    /* block group # of this superblock */
+    __u32 s_feature_compat;    /* compatible feature set */
+    __u32 s_feature_incompat;  /* incompatible feature set */
+    __u32 s_feature_ro_compat; /* readonly-compatible feature set */
+    __u8  s_uuid[16];          /* 128-bit uuid for volume */
+    char  s_volume_name[16];   /* volume name */
+    char  s_last_mounted[64];  /* directory where last mounted */
+    __u32 s_algorithm_usage_bitmap; /* For compression */
+    /*
+     * Performance hints.  Directory preallocation should only
+     * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
+     */
+    __u8  s_prealloc_blocks;   /* Nr of blocks to try to preallocate*/
+    __u8  s_prealloc_dir_blocks;       /* Nr to preallocate for dirs */
+    __u16 s_reserved_gdt_blocks;/* Per group table for online growth */
+    /*
+     * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
+     */
+    __u8 s_journal_uuid[16];   /* uuid of journal superblock */
+    __u32 s_journal_inum;      /* inode number of journal file */
+    __u32 s_journal_dev;       /* device number of journal file */
+    __u32 s_last_orphan;       /* start of list of inodes to delete */
+    __u32 s_hash_seed[4];      /* HTREE hash seed */
+    __u8  s_def_hash_version;  /* Default hash version to use */
+    __u8  s_jnl_backup_type;   /* Default type of journal backup */
+    __u16 s_reserved_word_pad;
+    __u32 s_default_mount_opts;
+    __u32 s_first_meta_bg;     /* First metablock group */
+    __u32 s_mkfs_time;         /* When the filesystem was created */
+    __u32 s_jnl_blocks[17];    /* Backup of the journal inode */
+    __u32 s_reserved[172];     /* Padding to the end of the block */
   };
 
 struct ext2_group_desc
@@ -216,6 +261,9 @@ struct ext2_dir_entry
 #define EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
 #define EXT2_ADDR_PER_BLOCK_BITS(s)            (log2(EXT2_ADDR_PER_BLOCK(s)))
 
+#define EXT2_INODE_SIZE(s)             (SUPERBLOCK->s_inode_size)
+#define EXT2_INODES_PER_BLOCK(s)       (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
+
 /* linux/ext2_fs.h */
 #define EXT2_BLOCK_SIZE_BITS(s)        ((s)->s_log_block_size + 10)
 /* kind of from ext2/super.c */
@@ -537,7 +585,7 @@ ext2fs_dir (fsi_file_t *ffi, char *dirna
       gdp = GROUP_DESC;
       ino_blk = gdp[desc].bg_inode_table +
        (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
-        >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)));
+        >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
 #ifdef E2DEBUG
       printf ("inode table fsblock=%d\n", ino_blk);
 #endif /* E2DEBUG */
@@ -549,13 +597,12 @@ ext2fs_dir (fsi_file_t *ffi, char *dirna
       /* reset indirect blocks! */
       mapblock2 = mapblock1 = -1;
 
-      raw_inode = INODE +
-       ((current_ino - 1)
-        & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1));
+      raw_inode = (struct ext2_inode *)((char *)INODE +
+       ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) *
+       EXT2_INODE_SIZE (SUPERBLOCK));
 #ifdef E2DEBUG
       printf ("ipb=%d, sizeof(inode)=%d\n",
-             (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)),
-             sizeof (struct ext2_inode));
+             EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK));
       printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode);
       printf ("offset into inode table block=%d\n", (int) raw_inode - (int) 
INODE);
       for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [LIBFSIMAGE] Support 256 byte inodes on ext3, Xen patchbot-unstable <=