[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <0151C905-AE23-4729-92B9-9EAFA44A92FD@dilger.ca>
Date: Sat, 3 Sep 2011 12:05:39 -0600
From: Andreas Dilger <adilger@...ger.ca>
To: "Darrick J. Wong" <djwong@...ibm.com>
Cc: Andreas Dilger <adilger.kernel@...ger.ca>,
Theodore Tso <tytso@....edu>,
"Darrick J. Wong" <djwong@...ibm.com>,
Sunil Mushran <sunil.mushran@...cle.com>,
Amir Goldstein <amir73il@...il.com>,
Andi Kleen <andi@...stfloor.org>,
Mingming Cao <cmm@...ibm.com>,
Joel Becker <jlbec@...lplan.org>,
"linux-ext4@...r.kernel.org" <linux-ext4@...r.kernel.org>,
Coly Li <colyli@...il.com>
Subject: Re: [PATCH 01/37] e2fsprogs: Read and write full-sized inodes
Why not just get rid of ext2_inode and replace it with ext2_inode_large? Less change to the code, and less confusion for developers.
Cheers, Andreas
On 2011-08-31, at 6:35 PM, "Darrick J. Wong" <djwong@...ibm.com> wrote:
> As part of adding inode checksums, it is necessary for all e2fsprogs to read
> and write full inodes so that checksums may be calculated correctly. Since
> struct ext2_inode_large is a superset of struct ext2_inode, replace the smaller
> one with the larger one.
>
> Signed-off-by: Darrick J. Wong <djwong@...ibm.com>
> ---
> debugfs/debugfs.c | 28 ++++++++--------
> debugfs/debugfs.h | 12 ++++---
> debugfs/dump.c | 12 +++----
> debugfs/htree.c | 10 +++---
> debugfs/icheck.c | 2 +
> debugfs/logdump.c | 13 ++++---
> debugfs/ls.c | 4 +-
> debugfs/lsdel.c | 2 +
> debugfs/ncheck.c | 2 +
> debugfs/set_fields.c | 2 +
> debugfs/util.c | 8 ++---
> doc/libext2fs.texinfo | 12 +++----
> e2fsck/e2fsck.h | 23 +++++++------
> e2fsck/emptydir.c | 2 +
> e2fsck/iscan.c | 2 +
> e2fsck/jfs_user.h | 2 +
> e2fsck/journal.c | 5 ++-
> e2fsck/message.c | 2 +
> e2fsck/pass1.c | 35 ++++++++++----------
> e2fsck/pass1b.c | 10 +++---
> e2fsck/pass2.c | 10 +++---
> e2fsck/pass3.c | 10 +++---
> e2fsck/pass4.c | 11 ++++--
> e2fsck/problem.h | 2 +
> e2fsck/rehash.c | 6 ++-
> e2fsck/scantest.c | 2 +
> e2fsck/super.c | 6 ++-
> e2fsck/util.c | 8 ++---
> ext2ed/dir_com.c | 2 +
> ext2ed/doc/ext2ed-design.sgml | 6 ++-
> ext2ed/doc/ext2fs-overview.sgml | 2 +
> ext2ed/ext2.descriptors | 2 +
> ext2ed/ext2ed.h | 4 +-
> ext2ed/file_com.c | 2 +
> ext2ed/init.c | 2 +
> ext2ed/inode_com.c | 18 +++++-----
> lib/e2p/ls.c | 2 +
> lib/ext2fs/bb_inode.c | 2 +
> lib/ext2fs/blknum.c | 8 ++---
> lib/ext2fs/block.c | 2 +
> lib/ext2fs/bmap.c | 16 +++++----
> lib/ext2fs/bmove.c | 4 +-
> lib/ext2fs/expanddir.c | 2 +
> lib/ext2fs/ext2_fs.h | 47 ---------------------------
> lib/ext2fs/ext2fs.h | 61 ++++++++++++++++++-----------------
> lib/ext2fs/ext2fsP.h | 2 +
> lib/ext2fs/extent.c | 6 ++-
> lib/ext2fs/fileio.c | 8 ++---
> lib/ext2fs/i_block.c | 7 ++--
> lib/ext2fs/initialize.c | 2 +
> lib/ext2fs/inode.c | 68 ++++++++++++++++++---------------------
> lib/ext2fs/inode_io.c | 6 ++-
> lib/ext2fs/link.c | 2 +
> lib/ext2fs/mkdir.c | 4 +-
> lib/ext2fs/mkjournal.c | 2 +
> lib/ext2fs/namei.c | 2 +
> lib/ext2fs/punch.c | 11 +++---
> lib/ext2fs/read_bb.c | 2 +
> lib/ext2fs/res_gdt.c | 2 +
> lib/ext2fs/swapfs.c | 22 ++++++-------
> lib/ext2fs/tst_iscan.c | 2 +
> lib/ext2fs/valid_blk.c | 2 +
> misc/dumpe2fs.c | 2 +
> misc/e2image.c | 6 ++-
> misc/e2initrd_helper.c | 2 +
> misc/mke2fs.c | 2 +
> misc/tune2fs.c | 4 +-
> resize/resize2fs.c | 10 +++---
> 68 files changed, 283 insertions(+), 318 deletions(-)
>
>
> diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
> index e7d7436..94732b9 100644
> --- a/debugfs/debugfs.c
> +++ b/debugfs/debugfs.c
> @@ -688,7 +688,7 @@ static void dump_extents(FILE *f, const char *prefix, ext2_ino_t ino,
> }
>
> void internal_dump_inode(FILE *out, const char *prefix,
> - ext2_ino_t inode_num, struct ext2_inode *inode,
> + ext2_ino_t inode_num, struct ext2_inode_large *inode,
> int do_dump_blocks)
> {
> const char *i_type;
> @@ -812,7 +812,7 @@ void internal_dump_inode(FILE *out, const char *prefix,
> }
> }
>
> -static void dump_inode(ext2_ino_t inode_num, struct ext2_inode *inode)
> +static void dump_inode(ext2_ino_t inode_num, struct ext2_inode_large *inode)
> {
> FILE *out;
>
> @@ -824,12 +824,12 @@ static void dump_inode(ext2_ino_t inode_num, struct ext2_inode *inode)
> void do_stat(int argc, char *argv[])
> {
> ext2_ino_t inode;
> - struct ext2_inode * inode_buf;
> + struct ext2_inode_large *inode_buf;
>
> if (check_fs_open(argv[0]))
> return;
>
> - inode_buf = (struct ext2_inode *)
> + inode_buf = (struct ext2_inode_large *)
> malloc(EXT2_INODE_SIZE(current_fs->super));
> if (!inode_buf) {
> fprintf(stderr, "do_stat: can't allocate buffer\n");
> @@ -854,7 +854,7 @@ void do_stat(int argc, char *argv[])
>
> void do_dump_extents(int argc, char **argv)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_ino_t ino;
> FILE *out;
> int c, flags = 0;
> @@ -959,7 +959,7 @@ void do_chroot(int argc, char *argv[])
> void do_clri(int argc, char *argv[])
> {
> ext2_ino_t inode;
> - struct ext2_inode inode_buf;
> + struct ext2_inode_large inode_buf;
>
> if (common_inode_args_process(argc, argv, &inode, CHECK_FS_RW))
> return;
> @@ -1135,7 +1135,7 @@ static void modify_u32(char *com, const char *prompt,
>
> void do_modify_inode(int argc, char *argv[])
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_ino_t inode_num;
> int i;
> unsigned char *frag, *fsize;
> @@ -1293,7 +1293,7 @@ static int ext2_file_type(unsigned int mode)
> static void make_link(char *sourcename, char *destname)
> {
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> int retval;
> ext2_ino_t dir;
> char *dest, *cp, *base_name;
> @@ -1369,7 +1369,7 @@ static int mark_blocks_proc(ext2_filsys fs, blk64_t *blocknr,
> void do_undel(int argc, char *argv[])
> {
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (common_args_process(argc, argv, 2, 3, "undelete",
> "<inode_num> [dest_name]",
> @@ -1577,7 +1577,7 @@ void do_write(int argc, char *argv[])
> struct stat statbuf;
> ext2_ino_t newfile;
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (common_args_process(argc, argv, 3, 3, "write",
> "<native file> <new file>", CHECK_FS_RW))
> @@ -1654,7 +1654,7 @@ void do_mknod(int argc, char *argv[])
> unsigned long mode, major, minor;
> ext2_ino_t newfile;
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> int filetype, nr;
>
> if (check_fs_open(argv[0]))
> @@ -1792,7 +1792,7 @@ static int release_blocks_proc(ext2_filsys fs, blk64_t *blocknr,
>
> static void kill_file_by_inode(ext2_ino_t inode)
> {
> - struct ext2_inode inode_buf;
> + struct ext2_inode_large inode_buf;
>
> if (debugfs_read_inode(inode, &inode_buf, 0))
> return;
> @@ -1824,7 +1824,7 @@ void do_rm(int argc, char *argv[])
> {
> int retval;
> ext2_ino_t inode_num;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (common_args_process(argc, argv, 2, 2, "rm",
> "<filename>", CHECK_FS_RW))
> @@ -1885,7 +1885,7 @@ void do_rmdir(int argc, char *argv[])
> {
> int retval;
> ext2_ino_t inode_num;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> struct rd_struct rds;
>
> if (common_args_process(argc, argv, 2, 2, "rmdir",
> diff --git a/debugfs/debugfs.h b/debugfs/debugfs.h
> index 0ea2474..d65a371 100644
> --- a/debugfs/debugfs.h
> +++ b/debugfs/debugfs.h
> @@ -44,13 +44,15 @@ extern int common_inode_args_process(int argc, char *argv[],
> ext2_ino_t *inode, int flags);
> extern int common_block_args_process(int argc, char *argv[],
> blk64_t *block, blk64_t *count);
> -extern int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
> +extern int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *cmd);
> -extern int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
> +extern int debugfs_read_inode_full(ext2_ino_t ino,
> + struct ext2_inode_large *inode,
> const char *cmd, int bufsize);
> -extern int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode * inode,
> +extern int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *cmd);
> -extern int debugfs_write_new_inode(ext2_ino_t ino, struct ext2_inode * inode,
> +extern int debugfs_write_new_inode(ext2_ino_t ino,
> + struct ext2_inode_large *inode,
> const char *cmd);
>
> /* ss command functions */
> @@ -87,7 +89,7 @@ extern void do_dump_unused(int argc, char **argv);
>
> /* debugfs.c */
> extern void internal_dump_inode(FILE *, const char *, ext2_ino_t,
> - struct ext2_inode *, int);
> + struct ext2_inode_large *, int);
>
> extern void do_dirty_filesys(int argc, char **argv);
> extern void do_open_filesys(int argc, char **argv);
> diff --git a/debugfs/dump.c b/debugfs/dump.c
> index 4cf0752..fe7e7f4 100644
> --- a/debugfs/dump.c
> +++ b/debugfs/dump.c
> @@ -66,7 +66,7 @@ static mode_t mode_xlate(__u16 lmode)
> return mode;
> }
>
> -static void fix_perms(const char *cmd, const struct ext2_inode *inode,
> +static void fix_perms(const char *cmd, const struct ext2_inode_large *inode,
> int fd, const char *name)
> {
> struct utimbuf ut;
> @@ -103,7 +103,7 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd,
> int preserve, char *outname)
> {
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> char buf[8192];
> ext2_file_t e2_file;
> int nbytes;
> @@ -187,7 +187,7 @@ void do_dump(int argc, char **argv)
> return;
> }
>
> -static void rdump_symlink(ext2_ino_t ino, struct ext2_inode *inode,
> +static void rdump_symlink(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *fullname)
> {
> ext2_file_t e2_file;
> @@ -241,7 +241,7 @@ errout:
>
> static int rdump_dirent(struct ext2_dir_entry *, int, int, char *, void *);
>
> -static void rdump_inode(ext2_ino_t ino, struct ext2_inode *inode,
> +static void rdump_inode(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *name, const char *dumproot)
> {
> char *fullname;
> @@ -298,7 +298,7 @@ static int rdump_dirent(struct ext2_dir_entry *dirent,
> char name[EXT2_NAME_LEN + 1];
> int thislen;
> const char *dumproot = private;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> thislen = ((dirent->name_len & 0xFF) < EXT2_NAME_LEN
> ? (dirent->name_len & 0xFF) : EXT2_NAME_LEN);
> @@ -316,7 +316,7 @@ static int rdump_dirent(struct ext2_dir_entry *dirent,
> void do_rdump(int argc, char **argv)
> {
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> struct stat st;
> int i;
> char *p;
> diff --git a/debugfs/htree.c b/debugfs/htree.c
> index b829e25..d72b996 100644
> --- a/debugfs/htree.c
> +++ b/debugfs/htree.c
> @@ -29,7 +29,7 @@ extern char *optarg;
> static FILE *pager;
>
> static void htree_dump_leaf_node(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> struct ext2_dx_root_info * rootnode,
> blk64_t blk, char *buf)
> {
> @@ -107,13 +107,13 @@ static void htree_dump_leaf_node(ext2_filsys fs, ext2_ino_t ino,
>
>
> static void htree_dump_int_block(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> struct ext2_dx_root_info * rootnode,
> blk64_t blk, char *buf, int level);
>
>
> static void htree_dump_int_node(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> struct ext2_dx_root_info * rootnode,
> struct ext2_dx_entry *ent,
> char *buf, int level)
> @@ -156,7 +156,7 @@ static void htree_dump_int_node(ext2_filsys fs, ext2_ino_t ino,
> }
>
> static void htree_dump_int_block(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> struct ext2_dx_root_info * rootnode,
> blk64_t blk, char *buf, int level)
> {
> @@ -196,7 +196,7 @@ errout:
> void do_htree_dump(int argc, char *argv[])
> {
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> blk64_t blk;
> char *buf = NULL;
> struct ext2_dx_root_info *rootnode;
> diff --git a/debugfs/icheck.c b/debugfs/icheck.c
> index 729ac93..d1aaefe 100644
> --- a/debugfs/icheck.c
> +++ b/debugfs/icheck.c
> @@ -59,7 +59,7 @@ void do_icheck(int argc, char **argv)
> int i;
> ext2_inode_scan scan = 0;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
> char *block_buf;
>
> diff --git a/debugfs/logdump.c b/debugfs/logdump.c
> index d1e64fd..dfb243e 100644
> --- a/debugfs/logdump.c
> +++ b/debugfs/logdump.c
> @@ -83,7 +83,7 @@ void do_logdump(int argc, char **argv)
> int journal_fd = 0;
> int use_sb = 0;
> ext2_ino_t journal_inum;
> - struct ext2_inode journal_inode;
> + struct ext2_inode_large journal_inode;
> ext2_file_t journal_file;
> char *tmp;
> struct journal_source journal_source;
> @@ -154,13 +154,13 @@ void do_logdump(int argc, char **argv)
> group_offset = ((inode_to_dump - 1)
> % es->s_inodes_per_group);
> inodes_per_block = (current_fs->blocksize
> - / sizeof(struct ext2_inode));
> + / EXT2_GOOD_OLD_INODE_SIZE);
>
> inode_block_to_dump =
> ext2fs_inode_table_loc(current_fs, inode_group) +
> (group_offset / inodes_per_block);
> inode_offset_to_dump = ((group_offset % inodes_per_block)
> - * sizeof(struct ext2_inode));
> + * EXT2_GOOD_OLD_INODE_SIZE);
> printf("Inode %u is at group %u, block %u, offset %u\n",
> inode_to_dump, inode_group,
> inode_block_to_dump, inode_offset_to_dump);
> @@ -206,7 +206,8 @@ void do_logdump(int argc, char **argv)
> "no journal backup in super block\n");
> goto errout;
> }
> - memset(&journal_inode, 0, sizeof(struct ext2_inode));
> + memset(&journal_inode, 0,
> + sizeof(struct ext2_inode_large));
> memcpy(&journal_inode.i_block[0], es->s_jnl_blocks,
> EXT2_N_BLOCKS*4);
> journal_inode.i_size_high = es->s_jnl_blocks[15];
> @@ -630,13 +631,13 @@ static void dump_metadata_block(FILE *out_file, struct journal_source *source,
> }
>
> if (fs_blocknr == inode_block_to_dump) {
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> int first, prev, this, start_extent, i;
>
> fprintf(out_file, " (inode block for inode %u):\n",
> inode_to_dump);
>
> - inode = (struct ext2_inode *) (buf + inode_offset_to_dump);
> + inode = (struct ext2_inode_large *)(buf + inode_offset_to_dump);
> internal_dump_inode(out_file, " ", inode_to_dump, inode, 0);
>
> /* Dump out the direct/indirect blocks here:
> diff --git a/debugfs/ls.c b/debugfs/ls.c
> index 8e019d2..9977a79 100644
> --- a/debugfs/ls.c
> +++ b/debugfs/ls.c
> @@ -49,7 +49,7 @@ static int list_dir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
> char *buf EXT2FS_ATTR((unused)),
> void *private)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_ino_t ino;
> struct tm *tm_p;
> time_t modtime;
> @@ -94,7 +94,7 @@ static int list_dir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
> tm_p->tm_min);
> } else {
> strcpy(datestr, " ");
> - memset(&inode, 0, sizeof(struct ext2_inode));
> + memset(&inode, 0, sizeof(struct ext2_inode_large));
> }
> fprintf(ls->f, "%c%6u%c %6o (%d) %5d %5d ", lbr, ino, rbr,
> inode.i_mode, dirent->name_len >> 8,
> diff --git a/debugfs/lsdel.c b/debugfs/lsdel.c
> index ba7a90f..4126dac 100644
> --- a/debugfs/lsdel.c
> +++ b/debugfs/lsdel.c
> @@ -77,7 +77,7 @@ void do_lsdel(int argc, char **argv)
> int num_delarray, max_delarray;
> ext2_inode_scan scan = 0;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
> char *block_buf;
> int i;
> diff --git a/debugfs/ncheck.c b/debugfs/ncheck.c
> index a366281..2de66ae 100644
> --- a/debugfs/ncheck.c
> +++ b/debugfs/ncheck.c
> @@ -56,7 +56,7 @@ void do_ncheck(int argc, char **argv)
> int i;
> ext2_inode_scan scan = 0;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
> char *tmp;
>
> diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
> index ac6bc25..1bc6410 100644
> --- a/debugfs/set_fields.c
> +++ b/debugfs/set_fields.c
> @@ -40,7 +40,7 @@
> #include "e2p/e2p.h"
>
> static struct ext2_super_block set_sb;
> -static struct ext2_inode set_inode;
> +static struct ext2_inode_large set_inode;
> static struct ext2_group_desc set_gd;
> static dgrp_t set_bg;
> static ext2_ino_t set_ino;
> diff --git a/debugfs/util.c b/debugfs/util.c
> index c3ac6f8..ff1f878 100644
> --- a/debugfs/util.c
> +++ b/debugfs/util.c
> @@ -375,7 +375,7 @@ int common_block_args_process(int argc, char *argv[],
> return 0;
> }
>
> -int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
> +int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *cmd, int bufsize)
> {
> int retval;
> @@ -388,7 +388,7 @@ int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
> return 0;
> }
>
> -int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
> +int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *cmd)
> {
> int retval;
> @@ -401,7 +401,7 @@ int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
> return 0;
> }
>
> -int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode * inode,
> +int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *cmd)
> {
> int retval;
> @@ -414,7 +414,7 @@ int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode * inode,
> return 0;
> }
>
> -int debugfs_write_new_inode(ext2_ino_t ino, struct ext2_inode * inode,
> +int debugfs_write_new_inode(ext2_ino_t ino, struct ext2_inode_large *inode,
> const char *cmd)
> {
> int retval;
> diff --git a/doc/libext2fs.texinfo b/doc/libext2fs.texinfo
> index d607396..5785f50 100644
> --- a/doc/libext2fs.texinfo
> +++ b/doc/libext2fs.texinfo
> @@ -426,7 +426,7 @@ opened via inode numbers instead of via pathnames. To resolve a
> pathname to an inode number, use the function @code{ext2fs_namei} or to
> create a new file, use @code{ext2fs_new_inode} and @code{ext2fs_link}.
>
> -@...typefun errcode_t ext2fs_file_open2 (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@...{inode}, int @var{flags}, ext2_file_t *@...{ret})
> +@...typefun errcode_t ext2fs_file_open2 (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode_large *@...{inode}, int @var{flags}, ext2_file_t *@...{ret})
> @deftypefunx errcode_t ext2fs_file_open (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, int @var{flags}, ext2_file_t *@...{ret})
>
> Opens a file identified by inode number @var{ino} in filesystem @var{fs}
> @@ -538,11 +538,11 @@ Return the size of the file @var{file}.
> @comment node-name, next, previous, up
> @subsection Reading and writing inodes
>
> -@...typefun errcode_t ext2fs_read_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@...{inode})
> +@...typefun errcode_t ext2fs_read_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode_large *@...{inode})
> Read the inode number @var{ino} into @var{inode}.
> @end deftypefun
>
> -@...typefun errcode_t ext2fs_write_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@...{inode})
> +@...typefun errcode_t ext2fs_write_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode_large *@...{inode})
> Write @var{inode} to inode @var{ino}.
> @end deftypefun
>
> @@ -569,7 +569,7 @@ suitable default value will be used.
> Release the memory associated with @var{scan} and invalidate it.
> @end deftypefun
>
> -@...typefun errcode_t ext2fs_get_next_inode (ext2_inode_scan @var{scan}, ext2_ino_t *@...{ino}, struct ext2_inode *@...{inode})
> +@...typefun errcode_t ext2fs_get_next_inode (ext2_inode_scan @var{scan}, ext2_ino_t *@...{ino}, struct ext2_inode_large *@...{inode})
>
> This function returns the next inode from the filesystem; the inode
> number of the inode is stored in @var{ino}, and the inode is stored in
> @@ -712,7 +712,7 @@ inode structure.
> Returns 0 if @var{ino} is a directory, and @code{ENOTDIR} if it is not.
> @end deftypefun
>
> -@...typefun int ext2fs_inode_has_valid_blocks (struct ext2_inode *@...{inode})
> +@...typefun int ext2fs_inode_has_valid_blocks (struct ext2_inode_large *@...{inode})
>
> Returns 1 if the inode's block entries actually valid block entries, and
> 0 if not. Inodes which represent devices and fast symbolic links do not
> @@ -1281,7 +1281,7 @@ intended for debugging and testing use only.
> @deftypefun void ext2fs_swap_group_desc (struct ext2_group_desc *@...{gdp})
> @end deftypefun
>
> -@...typefun void ext2fs_swap_inode (ext2_filsys @var{fs}, struct ext2_inode *@...{to}, struct ext2_inode *@...{from}, int @var{hostorder})
> +@...typefun void ext2fs_swap_inode (ext2_filsys @var{fs}, struct ext2_inode_large *@...{to}, struct ext2_inode_large *@...{from}, int @var{hostorder})
> @end deftypefun
>
> @deftypefun int ext2fs_native_flag (void)
> diff --git a/e2fsck/e2fsck.h b/e2fsck/e2fsck.h
> index b4a1a88..d515a9d 100644
> --- a/e2fsck/e2fsck.h
> +++ b/e2fsck/e2fsck.h
> @@ -267,7 +267,7 @@ struct e2fsck_struct {
> * For pass1_check_directory and pass1_get_blocks
> */
> ext2_ino_t stashed_ino;
> - struct ext2_inode *stashed_inode;
> + struct ext2_inode_large *stashed_inode;
>
> /*
> * Location of the lost and found directory
> @@ -446,11 +446,12 @@ extern void e2fsck_setup_tdb_icount(e2fsck_t ctx, int flags,
> ext2_icount_t *ret);
> extern void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool);
> extern int e2fsck_pass1_check_device_inode(ext2_filsys fs,
> - struct ext2_inode *inode);
> + struct ext2_inode_large *inode);
> extern int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode, char *buf);
> + struct ext2_inode_large *inode,
> + char *buf);
> extern void e2fsck_clear_inode(e2fsck_t ctx, ext2_ino_t ino,
> - struct ext2_inode *inode, int restart_flag,
> + struct ext2_inode_large *inode, int restart_flag,
> const char *source);
>
> /* pass2.c */
> @@ -505,17 +506,19 @@ extern void init_resource_track(struct resource_track *track,
> #define print_resource_track(ctx, desc, track, channel) do { } while (0)
> #define init_resource_track(track, channel) do { } while (0)
> #endif
> -extern int inode_has_valid_blocks(struct ext2_inode *inode);
> +extern int inode_has_valid_blocks(struct ext2_inode_large *inode);
> extern void e2fsck_read_inode(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode * inode, const char * proc);
> + struct ext2_inode_large *inode,
> + const char *proc);
> extern void e2fsck_read_inode_full(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> const int bufsize, const char *proc);
> extern void e2fsck_write_inode(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode * inode, const char * proc);
> + struct ext2_inode_large *inode,
> + const char *proc);
> extern void e2fsck_write_inode_full(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode * inode, int bufsize,
> - const char *proc);
> + struct ext2_inode_large *inode, int bufsize,
> + const char *proc);
> #ifdef MTRACE
> extern void mtrace_print(char *mesg);
> #endif
> diff --git a/e2fsck/emptydir.c b/e2fsck/emptydir.c
> index cf9b521..2ae5dcc 100644
> --- a/e2fsck/emptydir.c
> +++ b/e2fsck/emptydir.c
> @@ -24,7 +24,7 @@ struct empty_dir_info_struct {
> ext2fs_inode_bitmap dir_map;
> char *block_buf;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> blk64_t logblk;
> blk64_t freed_blocks;
> };
> diff --git a/e2fsck/iscan.c b/e2fsck/iscan.c
> index 84e2cc1..8cae736 100644
> --- a/e2fsck/iscan.c
> +++ b/e2fsck/iscan.c
> @@ -99,7 +99,7 @@ int main (int argc, char *argv[])
> ext2_filsys fs;
> ext2_ino_t ino;
> __u32 num_inodes = 0;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_inode_scan scan;
>
> init_resource_track(&global_rtrack);
> diff --git a/e2fsck/jfs_user.h b/e2fsck/jfs_user.h
> index 2bb71c3..2fada54 100644
> --- a/e2fsck/jfs_user.h
> +++ b/e2fsck/jfs_user.h
> @@ -28,7 +28,7 @@ struct buffer_head {
> struct inode {
> e2fsck_t i_ctx;
> ext2_ino_t i_ino;
> - struct ext2_inode i_ext2;
> + struct ext2_inode_large i_ext2;
> };
>
> struct kdev_s {
> diff --git a/e2fsck/journal.c b/e2fsck/journal.c
> index 6d350ee..0e2816f 100644
> --- a/e2fsck/journal.c
> +++ b/e2fsck/journal.c
> @@ -285,7 +285,8 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
> if (sb->s_jnl_backup_type != EXT3_JNL_BACKUP_BLOCKS ||
> tried_backup_jnl)
> goto errout;
> - memset(&j_inode->i_ext2, 0, sizeof(struct ext2_inode));
> + memset(&j_inode->i_ext2, 0,
> + sizeof(struct ext2_inode_large));
> memcpy(&j_inode->i_ext2.i_block[0], sb->s_jnl_blocks,
> EXT2_N_BLOCKS*4);
> j_inode->i_ext2.i_size_high = sb->s_jnl_blocks[15];
> @@ -912,7 +913,7 @@ void e2fsck_move_ext3_journal(e2fsck_t ctx)
> {
> struct ext2_super_block *sb = ctx->fs->super;
> struct problem_context pctx;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_filsys fs = ctx->fs;
> ext2_ino_t ino;
> errcode_t retval;
> diff --git a/e2fsck/message.c b/e2fsck/message.c
> index c456752..753dd26 100644
> --- a/e2fsck/message.c
> +++ b/e2fsck/message.c
> @@ -261,7 +261,7 @@ static _INLINE_ void expand_at_expression(e2fsck_t ctx, char ch,
> static _INLINE_ void expand_inode_expression(ext2_filsys fs, char ch,
> struct problem_context *ctx)
> {
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> struct ext2_inode_large *large_inode;
>
> if (!ctx || !ctx->inode)
> diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c
> index fe5dd9b..ba17b30 100644
> --- a/e2fsck/pass1.c
> +++ b/e2fsck/pass1.c
> @@ -86,7 +86,7 @@ struct process_block_struct {
> e2_blkcnt_t last_db_block;
> int num_illegal_blocks;
> blk64_t previous_block;
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> struct problem_context *pctx;
> ext2fs_block_bitmap fs_meta_blocks;
> e2fsck_t ctx;
> @@ -94,7 +94,7 @@ struct process_block_struct {
>
> struct process_inode_block {
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> };
>
> struct scan_callback_struct {
> @@ -130,7 +130,7 @@ static void unwind_pass1(ext2_filsys fs EXT2FS_ATTR((unused)))
> * zero.
> */
> int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)),
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> int i;
>
> @@ -165,7 +165,7 @@ int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)),
> * checks out, 0 if not.
> */
> int e2fsck_pass1_check_symlink(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode, char *buf)
> + struct ext2_inode_large *inode, char *buf)
> {
> unsigned int len;
> int i;
> @@ -254,7 +254,7 @@ static void check_immutable(e2fsck_t ctx, struct problem_context *pctx)
> */
> static void check_size(e2fsck_t ctx, struct problem_context *pctx)
> {
> - struct ext2_inode *inode = pctx->inode;
> + struct ext2_inode_large *inode = pctx->inode;
>
> if (EXT2_I_SIZE(inode) == 0)
> return;
> @@ -400,7 +400,7 @@ static void check_inode_extra_space(e2fsck_t ctx, struct problem_context *pctx)
> static void check_is_really_dir(e2fsck_t ctx, struct problem_context *pctx,
> char *buf)
> {
> - struct ext2_inode *inode = pctx->inode;
> + struct ext2_inode_large *inode = pctx->inode;
> struct ext2_dir_entry *dirent;
> const char *old_op;
> errcode_t retval;
> @@ -546,7 +546,7 @@ void e2fsck_pass1(e2fsck_t ctx)
> __u64 max_sizes;
> ext2_filsys fs = ctx->fs;
> ext2_ino_t ino;
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> ext2_inode_scan scan;
> char *block_buf;
> #ifdef RESOURCE_TRACK
> @@ -637,8 +637,9 @@ void e2fsck_pass1(e2fsck_t ctx)
> return;
> }
> inode_size = EXT2_INODE_SIZE(fs->super);
> - inode = (struct ext2_inode *)
> - e2fsck_allocate_memory(ctx, inode_size, "scratch inode");
> + if (sizeof(struct ext2_inode_large) > inode_size)
> + inode_size = sizeof(struct ext2_inode_large);
> + inode = e2fsck_allocate_memory(ctx, inode_size, "scratch inode");
>
> inodes_to_process = (struct process_inode_block *)
> e2fsck_allocate_memory(ctx,
> @@ -1212,7 +1213,7 @@ static errcode_t scan_callback(ext2_filsys fs,
> static void process_inodes(e2fsck_t ctx, char *block_buf)
> {
> int i;
> - struct ext2_inode *old_stashed_inode;
> + struct ext2_inode_large *old_stashed_inode;
> ext2_ino_t old_stashed_ino;
> const char *old_operation;
> char buf[80];
> @@ -1421,7 +1422,7 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
> {
> ext2_filsys fs = ctx->fs;
> ext2_ino_t ino = pctx->ino;
> - struct ext2_inode *inode = pctx->inode;
> + struct ext2_inode_large *inode = pctx->inode;
> blk64_t blk;
> char * end;
> struct ext2_ext_attr_header *header;
> @@ -1599,7 +1600,7 @@ clear_extattr:
>
> /* Returns 1 if bad htree, 0 if OK */
> static int handle_htree(e2fsck_t ctx, struct problem_context *pctx,
> - ext2_ino_t ino, struct ext2_inode *inode,
> + ext2_ino_t ino, struct ext2_inode_large *inode,
> char *block_buf)
> {
> struct ext2_dx_root_info *root;
> @@ -1656,7 +1657,7 @@ static int handle_htree(e2fsck_t ctx, struct problem_context *pctx,
> }
>
> void e2fsck_clear_inode(e2fsck_t ctx, ext2_ino_t ino,
> - struct ext2_inode *inode, int restart_flag,
> + struct ext2_inode_large *inode, int restart_flag,
> const char *source)
> {
> inode->i_flags = 0;
> @@ -1841,7 +1842,7 @@ static void check_blocks_extents(e2fsck_t ctx, struct problem_context *pctx,
> struct process_block_struct *pb)
> {
> struct ext2_extent_info info;
> - struct ext2_inode *inode = pctx->inode;
> + struct ext2_inode_large *inode = pctx->inode;
> ext2_extent_handle_t ehandle;
> ext2_filsys fs = ctx->fs;
> ext2_ino_t ino = pctx->ino;
> @@ -1885,7 +1886,7 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
> ext2_filsys fs = ctx->fs;
> struct process_block_struct pb;
> ext2_ino_t ino = pctx->ino;
> - struct ext2_inode *inode = pctx->inode;
> + struct ext2_inode_large *inode = pctx->inode;
> int bad_size = 0;
> int dirty_inode = 0;
> int extent_fs;
> @@ -2671,7 +2672,7 @@ static errcode_t pass1_get_blocks(ext2_filsys fs, ext2_ino_t ino,
> }
>
> static errcode_t pass1_read_inode(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> e2fsck_t ctx = (e2fsck_t) fs->priv_data;
>
> @@ -2682,7 +2683,7 @@ static errcode_t pass1_read_inode(ext2_filsys fs, ext2_ino_t ino,
> }
>
> static errcode_t pass1_write_inode(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> e2fsck_t ctx = (e2fsck_t) fs->priv_data;
>
> diff --git a/e2fsck/pass1b.c b/e2fsck/pass1b.c
> index 12a03b0..efa68c7 100644
> --- a/e2fsck/pass1b.c
> +++ b/e2fsck/pass1b.c
> @@ -78,7 +78,7 @@ struct dup_cluster {
> struct dup_inode {
> ext2_ino_t dir;
> int num_dupblocks;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> struct cluster_el *cluster_list;
> };
>
> @@ -117,7 +117,7 @@ static int dict_int_cmp(const void *a, const void *b)
> * Add a duplicate block record
> */
> static void add_dupe(e2fsck_t ctx, ext2_ino_t ino, blk64_t cluster,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> dnode_t *n;
> struct dup_cluster *db;
> @@ -258,7 +258,7 @@ struct process_block_struct {
> e2fsck_t ctx;
> ext2_ino_t ino;
> int dup_blocks;
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> struct problem_context *pctx;
> };
>
> @@ -266,7 +266,7 @@ static void pass1b(e2fsck_t ctx, char *block_buf)
> {
> ext2_filsys fs = ctx->fs;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_inode_scan scan;
> struct process_block_struct pb;
> struct problem_context pctx;
> @@ -606,7 +606,7 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
> {
> ext2_filsys fs = ctx->fs;
> struct process_block_struct pb;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> struct problem_context pctx;
> unsigned int count;
>
> diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c
> index 2863699..9241a07 100644
> --- a/e2fsck/pass2.c
> +++ b/e2fsck/pass2.c
> @@ -479,7 +479,7 @@ static _INLINE_ int check_filetype(e2fsck_t ctx,
> {
> int filetype = dirent->name_len >> 8;
> int should_be = EXT2_FT_UNKNOWN;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (!(ctx->fs->super->s_feature_incompat &
> EXT2_FEATURE_INCOMPAT_FILETYPE)) {
> @@ -1178,7 +1178,7 @@ static int deallocate_inode_block(ext2_filsys fs,
> static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
> {
> ext2_filsys fs = ctx->fs;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> struct problem_context pctx;
> __u32 count;
>
> @@ -1237,7 +1237,7 @@ static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
> */
> static void clear_htree(e2fsck_t ctx, ext2_ino_t ino)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> e2fsck_read_inode(ctx, ino, &inode, "clear_htree");
> inode.i_flags = inode.i_flags & ~EXT2_INDEX_FL;
> @@ -1251,7 +1251,7 @@ extern int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir,
> ext2_ino_t ino, char *buf)
> {
> ext2_filsys fs = ctx->fs;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> int inode_modified = 0;
> int not_fixed = 0;
> unsigned char *frag, *fsize;
> @@ -1404,7 +1404,7 @@ static int allocate_dir_block(e2fsck_t ctx,
> ext2_filsys fs = ctx->fs;
> blk64_t blk;
> char *block;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (fix_problem(ctx, PR_2_DIRECTORY_HOLE, pctx) == 0)
> return 1;
> diff --git a/e2fsck/pass3.c b/e2fsck/pass3.c
> index c067164..2330aab 100644
> --- a/e2fsck/pass3.c
> +++ b/e2fsck/pass3.c
> @@ -142,7 +142,7 @@ static void check_root(e2fsck_t ctx)
> {
> ext2_filsys fs = ctx->fs;
> blk64_t blk;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> char * block;
> struct problem_context pctx;
>
> @@ -357,7 +357,7 @@ ext2_ino_t e2fsck_get_lost_and_found(e2fsck_t ctx, int fix)
> ext2_ino_t ino;
> blk64_t blk;
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> char * block;
> static const char name[] = "lost+found";
> struct problem_context pctx;
> @@ -503,7 +503,7 @@ int e2fsck_reconnect_file(e2fsck_t ctx, ext2_ino_t ino)
> errcode_t retval;
> char name[80];
> struct problem_context pctx;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> int file_type = 0;
>
> clear_problem_context(&pctx);
> @@ -552,7 +552,7 @@ errcode_t e2fsck_adjust_inode_count(e2fsck_t ctx, ext2_ino_t ino, int adj)
> {
> ext2_filsys fs = ctx->fs;
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (!ino)
> return 0;
> @@ -753,7 +753,7 @@ errcode_t e2fsck_expand_directory(e2fsck_t ctx, ext2_ino_t dir,
> ext2_filsys fs = ctx->fs;
> errcode_t retval;
> struct expand_dir_struct es;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (!(fs->flags & EXT2_FLAG_RW))
> return EXT2_ET_RO_FILSYS;
> diff --git a/e2fsck/pass4.c b/e2fsck/pass4.c
> index 695612b..566854f 100644
> --- a/e2fsck/pass4.c
> +++ b/e2fsck/pass4.c
> @@ -25,7 +25,7 @@
> * rest of the pass 4 tests.
> */
> static int disconnect_inode(e2fsck_t ctx, ext2_ino_t i,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> ext2_filsys fs = ctx->fs;
> struct problem_context pctx;
> @@ -90,7 +90,7 @@ void e2fsck_pass4(e2fsck_t ctx)
> {
> ext2_filsys fs = ctx->fs;
> ext2_ino_t i;
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> #ifdef RESOURCE_TRACK
> struct resource_track rtrack;
> #endif
> @@ -98,6 +98,7 @@ void e2fsck_pass4(e2fsck_t ctx)
> __u16 link_count, link_counted;
> char *buf = 0;
> int group, maxgroup;
> + int inode_size;
>
> init_resource_track(&rtrack, ctx->fs->io);
>
> @@ -116,8 +117,10 @@ void e2fsck_pass4(e2fsck_t ctx)
> if ((ctx->progress)(ctx, 4, 0, maxgroup))
> return;
>
> - inode = e2fsck_allocate_memory(ctx, EXT2_INODE_SIZE(fs->super),
> - "scratch inode");
> + inode_size = EXT2_INODE_SIZE(fs->super);
> + if (sizeof(struct ext2_inode_large) > inode_size)
> + inode_size = sizeof(struct ext2_inode_large);
> + inode = e2fsck_allocate_memory(ctx, inode_size, "scratch inode");
>
> /* Protect loop from wrap-around if s_inodes_count maxed */
> for (i=1; i <= fs->super->s_inodes_count && i > 0; i++) {
> diff --git a/e2fsck/problem.h b/e2fsck/problem.h
> index 8379e0c..a4d96ae 100644
> --- a/e2fsck/problem.h
> +++ b/e2fsck/problem.h
> @@ -14,7 +14,7 @@ typedef __u32 problem_t;
> struct problem_context {
> errcode_t errcode;
> ext2_ino_t ino, ino2, dir;
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> struct ext2_dir_entry *dirent;
> blk64_t blk, blk2;
> e2_blkcnt_t blkcount;
> diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
> index e8af323..1263f56 100644
> --- a/e2fsck/rehash.c
> +++ b/e2fsck/rehash.c
> @@ -53,7 +53,7 @@
>
> struct fill_dir_struct {
> char *buf;
> - struct ext2_inode *inode;
> + struct ext2_inode_large *inode;
> int err;
> e2fsck_t ctx;
> struct hash_entry *harray;
> @@ -670,7 +670,7 @@ static errcode_t write_directory(e2fsck_t ctx, ext2_filsys fs,
> {
> struct write_dir_struct wd;
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> retval = e2fsck_expand_directory(ctx, ino, -1, outdir->num);
> if (retval)
> @@ -704,7 +704,7 @@ errcode_t e2fsck_rehash_dir(e2fsck_t ctx, ext2_ino_t ino)
> {
> ext2_filsys fs = ctx->fs;
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> char *dir_buf = 0;
> struct fill_dir_struct fd;
> struct out_dir outdir;
> diff --git a/e2fsck/scantest.c b/e2fsck/scantest.c
> index ed586b1..01b243d 100644
> --- a/e2fsck/scantest.c
> +++ b/e2fsck/scantest.c
> @@ -95,7 +95,7 @@ int main (int argc, char *argv[])
> ext2_filsys fs;
> ext2_inode_scan scan;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> printf(_("size of inode=%d\n"), sizeof(inode));
>
> diff --git a/e2fsck/super.c b/e2fsck/super.c
> index a61eb33..28f041d 100644
> --- a/e2fsck/super.c
> +++ b/e2fsck/super.c
> @@ -151,7 +151,7 @@ static int release_inode_block(ext2_filsys fs,
> * not deleted.
> */
> static int release_inode_blocks(e2fsck_t ctx, ext2_ino_t ino,
> - struct ext2_inode *inode, char *block_buf,
> + struct ext2_inode_large *inode, char *block_buf,
> struct problem_context *pctx)
> {
> struct process_block_struct pb;
> @@ -226,7 +226,7 @@ static int release_orphan_inodes(e2fsck_t ctx)
> {
> ext2_filsys fs = ctx->fs;
> ext2_ino_t ino, next_ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> struct problem_context pctx;
> char *block_buf;
>
> @@ -308,7 +308,7 @@ return_abort:
> void check_resize_inode(e2fsck_t ctx)
> {
> ext2_filsys fs = ctx->fs;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> struct problem_context pctx;
> int i, gdt_off, ind_off;
> dgrp_t j;
> diff --git a/e2fsck/util.c b/e2fsck/util.c
> index fb9a87a..22e06c2 100644
> --- a/e2fsck/util.c
> +++ b/e2fsck/util.c
> @@ -381,7 +381,7 @@ void print_resource_track(e2fsck_t ctx, const char *desc,
> #endif /* RESOURCE_TRACK */
>
> void e2fsck_read_inode(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode * inode, const char *proc)
> + struct ext2_inode_large *inode, const char *proc)
> {
> int retval;
>
> @@ -394,7 +394,7 @@ void e2fsck_read_inode(e2fsck_t ctx, unsigned long ino,
> }
>
> void e2fsck_read_inode_full(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode *inode, int bufsize,
> + struct ext2_inode_large *inode, int bufsize,
> const char *proc)
> {
> int retval;
> @@ -408,7 +408,7 @@ void e2fsck_read_inode_full(e2fsck_t ctx, unsigned long ino,
> }
>
> extern void e2fsck_write_inode_full(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode * inode, int bufsize,
> + struct ext2_inode_large *inode, int bufsize,
> const char *proc)
> {
> int retval;
> @@ -422,7 +422,7 @@ extern void e2fsck_write_inode_full(e2fsck_t ctx, unsigned long ino,
> }
>
> extern void e2fsck_write_inode(e2fsck_t ctx, unsigned long ino,
> - struct ext2_inode * inode, const char *proc)
> + struct ext2_inode_large *inode, const char *proc)
> {
> int retval;
>
> diff --git a/ext2ed/dir_com.c b/ext2ed/dir_com.c
> index b023e7a..8c49af3 100644
> --- a/ext2ed/dir_com.c
> +++ b/ext2ed/dir_com.c
> @@ -48,7 +48,7 @@ directories.
> */
>
> {
> - struct ext2_inode *ptr;
> + struct ext2_inode_large *ptr;
>
> ptr=&type_data.u.t_ext2_inode; /* type_data contains the inode */
>
> diff --git a/ext2ed/doc/ext2ed-design.sgml b/ext2ed/doc/ext2ed-design.sgml
> index ad2df96..7f42a1a 100644
> --- a/ext2ed/doc/ext2ed-design.sgml
> +++ b/ext2ed/doc/ext2ed-design.sgml
> @@ -1955,7 +1955,7 @@ struct struct_type_data {
> struct ext2_acl_entry t_ext2_acl_entry;
> struct ext2_old_group_desc t_ext2_old_group_desc;
> struct ext2_group_desc t_ext2_group_desc;
> - struct ext2_inode t_ext2_inode;
> + struct ext2_inode_large t_ext2_inode;
> struct ext2_super_block t_ext2_super_block;
> struct ext2_dir_entry t_ext2_dir_entry;
> } u;
> @@ -2703,7 +2703,7 @@ directory.
> <Para>
>
> <ProgramListing>
> -struct ext2_inode {
> +struct ext2_inode_large {
> __u16 i_mode; /* File mode */
> __u16 i_uid; /* Owner Uid */
> __u32 i_size; /* Size in bytes */
> @@ -2873,7 +2873,7 @@ initialized:
> <ProgramListing>
> struct struct_file_info {
>
> - struct ext2_inodes *inode_ptr;
> + struct ext2_inode_larges *inode_ptr;
>
> long inode_offset;
> long global_block_num,global_block_offset;
> diff --git a/ext2ed/doc/ext2fs-overview.sgml b/ext2ed/doc/ext2fs-overview.sgml
> index a6ebf5a..119cc26 100644
> --- a/ext2ed/doc/ext2fs-overview.sgml
> +++ b/ext2ed/doc/ext2fs-overview.sgml
> @@ -461,7 +461,7 @@ Follows the structure of an inode in Ext2fs:
> <Para>
>
> <ProgramListing>
> -struct ext2_inode {
> +struct ext2_inode_large {
> __u16 i_mode; /* File mode */
> __u16 i_uid; /* Owner Uid */
> __u32 i_size; /* Size in bytes */
> diff --git a/ext2ed/ext2.descriptors b/ext2ed/ext2.descriptors
> index bf927b0..abd81f6 100644
> --- a/ext2ed/ext2.descriptors
> +++ b/ext2ed/ext2.descriptors
> @@ -72,7 +72,7 @@ struct ext2_group_desc
> /*
> * Structure of an inode on the disk
> */
> -struct ext2_inode {
> +struct ext2_inode_large {
> __u16 i_mode; /* File mode */
> __u16 i_uid; /* Owner Uid */
> __u32 i_size; /* Size in bytes */
> diff --git a/ext2ed/ext2ed.h b/ext2ed/ext2ed.h
> index 2ee483e..32161f5 100644
> --- a/ext2ed/ext2ed.h
> +++ b/ext2ed/ext2ed.h
> @@ -112,7 +112,7 @@ struct struct_type_data { /* The object's data is usually here */
> struct ext2_acl_header t_ext2_acl_header;
> struct ext2_acl_entry t_ext2_acl_entry;
> struct ext2_group_desc t_ext2_group_desc;
> - struct ext2_inode t_ext2_inode;
> + struct ext2_inode_large t_ext2_inode;
> struct ext2_super_block t_ext2_super_block;
> struct ext2_dir_entry t_ext2_dir_entry;
> } u;
> @@ -132,7 +132,7 @@ struct struct_file_system_info { /* Important information about the filesystem
>
> struct struct_file_info { /* Used to handle files and directories */
>
> - struct ext2_inode *inode_ptr;
> + struct ext2_inode_large *inode_ptr;
>
> long inode_offset;
> long global_block_num,global_block_offset;
> diff --git a/ext2ed/file_com.c b/ext2ed/file_com.c
> index 9772f66..0fdedaf 100644
> --- a/ext2ed/file_com.c
> +++ b/ext2ed/file_com.c
> @@ -23,7 +23,7 @@ Copyright (C) 1995 Gadi Oxman
> int init_file_info (void)
>
> {
> - struct ext2_inode *ptr;
> + struct ext2_inode_large *ptr;
>
> ptr=&type_data.u.t_ext2_inode;
>
> diff --git a/ext2ed/init.c b/ext2ed/init.c
> index 3815ab5..af47cd2 100644
> --- a/ext2ed/init.c
> +++ b/ext2ed/init.c
> @@ -418,7 +418,7 @@ int set_file_system_info (void)
> file_system_info.groups_count = ext2fs_div64_ceil(ext2fs_blocks_count(sb),
> sb->s_blocks_per_group);
>
> - file_system_info.inodes_per_block=file_system_info.block_size/sizeof (struct ext2_inode);
> + file_system_info.inodes_per_block=file_system_info.block_size/EXT2_GOOD_OLD_INODE_SIZE;
> file_system_info.blocks_per_group=sb->s_inodes_per_group/file_system_info.inodes_per_block;
> file_system_info.no_blocks_in_group=sb->s_blocks_per_group;
> file_system_info.file_system_size=(ext2fs_blocks_count(sb)-1)*file_system_info.block_size;
> diff --git a/ext2ed/inode_com.c b/ext2ed/inode_com.c
> index 8d4b9f3..b2fa692 100644
> --- a/ext2ed/inode_com.c
> +++ b/ext2ed/inode_com.c
> @@ -43,13 +43,13 @@ void type_ext2_inode___prev (char *command_line)
>
> low_read ((char *) &desc,sizeof (struct ext2_group_desc),group_offset);
>
> - entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/sizeof (struct ext2_inode);
> + entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/EXT2_GOOD_OLD_INODE_SIZE;
>
> first_entry=0;last_entry=file_system_info.super_block.s_inodes_per_group-1;
> inode_num=0;
>
> if (entry_num-mult+1>0) {
> - device_offset-=sizeof (struct ext2_inode)*mult;
> + device_offset-=sizeof (struct ext2_inode_large)*mult;
> entry_num-=mult;
>
> sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
> @@ -91,13 +91,13 @@ void type_ext2_inode___next (char *command_line)
>
> low_read ((char *) &desc,sizeof (struct ext2_group_desc),group_offset);
>
> - entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/sizeof (struct ext2_inode);
> + entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/EXT2_GOOD_OLD_INODE_SIZE;
>
> first_entry=0;last_entry=file_system_info.super_block.s_inodes_per_group-1;
> inode_num=0;
>
> if (entry_num+mult-1<last_entry) {
> - device_offset+=sizeof (struct ext2_inode)*mult;
> + device_offset+=sizeof (struct ext2_inode_large)*mult;
> entry_num+=mult;
>
> sprintf (buffer,"setoffset %ld",device_offset);dispatch (buffer);
> @@ -118,7 +118,7 @@ void type_ext2_inode___next (char *command_line)
> void type_ext2_inode___show (char *command_line)
>
> {
> - struct ext2_inode *inode_ptr;
> + struct ext2_inode_large *inode_ptr;
>
> unsigned short temp;
> int i;
> @@ -133,7 +133,7 @@ void type_ext2_inode___show (char *command_line)
>
> low_read ((char *) &desc,sizeof (struct ext2_group_desc),group_offset);
>
> - entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/sizeof (struct ext2_inode);
> + entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/EXT2_GOOD_OLD_INODE_SIZE;
> first_entry=0;last_entry=file_system_info.super_block.s_inodes_per_group-1;
> inode_num=group_num*file_system_info.super_block.s_inodes_per_group+1;
> inode_num+=entry_num;
> @@ -299,7 +299,7 @@ void type_ext2_inode___entry (char *command_line)
>
> low_read ((char *) &desc,sizeof (struct ext2_group_desc),group_offset);
>
> - entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/sizeof (struct ext2_inode);
> + entry_num=(device_offset-desc.bg_inode_table*file_system_info.block_size)/EXT2_GOOD_OLD_INODE_SIZE;
>
> if (wanted_entry > entry_num) {
> sprintf (buffer,"next %ld",wanted_entry-entry_num);
> @@ -409,7 +409,7 @@ long int inode_offset_to_inode_num (long inode_offset)
>
> low_read ((char *) &desc,sizeof (struct ext2_group_desc),group_offset);
>
> - entry_num=(inode_offset-desc.bg_inode_table*file_system_info.block_size)/sizeof (struct ext2_inode);
> + entry_num=(inode_offset-desc.bg_inode_table*file_system_info.block_size)/EXT2_GOOD_OLD_INODE_SIZE;
> first_entry=0;last_entry=file_system_info.super_block.s_inodes_per_group-1;
> inode_num=group_num*file_system_info.super_block.s_inodes_per_group+1;
> inode_num+=entry_num;
> @@ -430,7 +430,7 @@ long int inode_num_to_inode_offset (long inode_num)
> group_offset=file_system_info.first_group_desc_offset+group_num*sizeof (struct ext2_group_desc);
> low_read ((char *) &desc,sizeof (struct ext2_group_desc),group_offset);
>
> - inode_offset=desc.bg_inode_table*file_system_info.block_size+inode_entry*sizeof (struct ext2_inode);
> + inode_offset=desc.bg_inode_table*file_system_info.block_size+inode_entry*EXT2_GOOD_OLD_INODE_SIZE;
>
> return (inode_offset);
> }
> diff --git a/lib/e2p/ls.c b/lib/e2p/ls.c
> index 0f36f40..aa4a389 100644
> --- a/lib/e2p/ls.c
> +++ b/lib/e2p/ls.c
> @@ -188,7 +188,7 @@ static __u64 e2p_free_blocks_count(struct ext2_super_block *super)
> }
>
> #ifndef EXT2_INODE_SIZE
> -#define EXT2_INODE_SIZE(s) sizeof(struct ext2_inode)
> +#define EXT2_INODE_SIZE(s) sizeof(struct ext2_inode_large)
> #endif
>
> #ifndef EXT2_GOOD_OLD_REV
> diff --git a/lib/ext2fs/bb_inode.c b/lib/ext2fs/bb_inode.c
> index 0b6c3dd..dbc29d6 100644
> --- a/lib/ext2fs/bb_inode.c
> +++ b/lib/ext2fs/bb_inode.c
> @@ -58,7 +58,7 @@ errcode_t ext2fs_update_bb_inode(ext2_filsys fs, ext2_badblocks_list bb_list)
> {
> errcode_t retval;
> struct set_badblock_record rec;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
>
> diff --git a/lib/ext2fs/blknum.c b/lib/ext2fs/blknum.c
> index b3e6dca..7e7fcd8 100644
> --- a/lib/ext2fs/blknum.c
> +++ b/lib/ext2fs/blknum.c
> @@ -46,7 +46,7 @@ blk64_t ext2fs_group_last_block2(ext2_filsys fs, dgrp_t group)
> * Return the inode data block count
> */
> blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> return (inode->i_blocks |
> ((fs->super->s_feature_ro_compat &
> @@ -59,7 +59,7 @@ blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs,
> * Return the inode i_blocks count
> */
> blk64_t ext2fs_inode_i_blocks(ext2_filsys fs,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> return (inode->i_blocks |
> ((fs->super->s_feature_ro_compat &
> @@ -460,7 +460,7 @@ void ext2fs_bg_checksum_set(ext2_filsys fs, dgrp_t group, __u16 checksum)
> * called don't have access to the fs struct, and the high bits should
> * be 0 in the non-64-bit case anyway.
> */
> -blk64_t ext2fs_file_acl_block(const struct ext2_inode *inode)
> +blk64_t ext2fs_file_acl_block(const struct ext2_inode_large *inode)
> {
> return (inode->i_file_acl |
> (__u64) inode->osd2.linux2.l_i_file_acl_high << 32);
> @@ -469,7 +469,7 @@ blk64_t ext2fs_file_acl_block(const struct ext2_inode *inode)
> /*
> * Set the acl block of a file
> */
> -void ext2fs_file_acl_block_set(struct ext2_inode *inode, blk64_t blk)
> +void ext2fs_file_acl_block_set(struct ext2_inode_large *inode, blk64_t blk)
> {
> inode->i_file_acl = blk;
> inode->osd2.linux2.l_i_file_acl_high = (__u64) blk >> 32;
> diff --git a/lib/ext2fs/block.c b/lib/ext2fs/block.c
> index 95ad31e..f193dc2 100644
> --- a/lib/ext2fs/block.c
> +++ b/lib/ext2fs/block.c
> @@ -331,7 +331,7 @@ errcode_t ext2fs_block_iterate3(ext2_filsys fs,
> {
> int i;
> int r, ret = 0;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
> struct block_context ctx;
> int limit;
> diff --git a/lib/ext2fs/bmap.c b/lib/ext2fs/bmap.c
> index 7a515be..26f2074 100644
> --- a/lib/ext2fs/bmap.c
> +++ b/lib/ext2fs/bmap.c
> @@ -26,7 +26,7 @@
> #endif
>
> extern errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> char *block_buf, int bmap_flags,
> blk_t block, blk_t *phys_blk);
>
> @@ -130,14 +130,14 @@ static _BMAP_INLINE_ errcode_t block_tind_bmap(ext2_filsys fs, int flags,
> }
>
> static errcode_t extent_bmap(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> ext2_extent_handle_t handle,
> char *block_buf, int bmap_flags, blk64_t block,
> int *ret_flags, int *blocks_alloc,
> blk64_t *phys_blk);
>
> static errcode_t implied_cluster_alloc(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> ext2_extent_handle_t handle,
> blk64_t block, blk64_t *phys_blk)
> {
> @@ -164,7 +164,7 @@ static errcode_t implied_cluster_alloc(ext2_filsys fs, ext2_ino_t ino,
> }
>
> static errcode_t extent_bmap(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> ext2_extent_handle_t handle,
> char *block_buf, int bmap_flags, blk64_t block,
> int *ret_flags, int *blocks_alloc,
> @@ -229,11 +229,12 @@ got_block:
> }
>
>
> -errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
> +errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino,
> + struct ext2_inode_large *inode,
> char *block_buf, int bmap_flags, blk64_t block,
> int *ret_flags, blk64_t *phys_blk)
> {
> - struct ext2_inode inode_buf;
> + struct ext2_inode_large inode_buf;
> ext2_extent_handle_t handle = 0;
> blk_t addr_per_block;
> blk_t b, blk32;
> @@ -379,7 +380,8 @@ done:
> return retval;
> }
>
> -errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode,
> +errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino,
> + struct ext2_inode_large *inode,
> char *block_buf, int bmap_flags, blk_t block,
> blk_t *phys_blk)
> {
> diff --git a/lib/ext2fs/bmove.c b/lib/ext2fs/bmove.c
> index deabf38..1443f57 100644
> --- a/lib/ext2fs/bmove.c
> +++ b/lib/ext2fs/bmove.c
> @@ -27,7 +27,7 @@
>
> struct process_block_struct {
> ext2_ino_t ino;
> - struct ext2_inode * inode;
> + struct ext2_inode_large *inode;
> ext2fs_block_bitmap reserve;
> ext2fs_block_bitmap alloc_map;
> errcode_t error;
> @@ -99,7 +99,7 @@ errcode_t ext2fs_move_blocks(ext2_filsys fs,
> int flags)
> {
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
> struct process_block_struct pb;
> ext2_inode_scan scan;
> diff --git a/lib/ext2fs/expanddir.c b/lib/ext2fs/expanddir.c
> index 8f738c8..ee90970 100644
> --- a/lib/ext2fs/expanddir.c
> +++ b/lib/ext2fs/expanddir.c
> @@ -91,7 +91,7 @@ errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir)
> {
> errcode_t retval;
> struct expand_dir_struct es;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
>
> diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
> index 54cb3d4..e342bf0 100644
> --- a/lib/ext2fs/ext2_fs.h
> +++ b/lib/ext2fs/ext2_fs.h
> @@ -329,53 +329,6 @@ struct ext4_new_group_input {
> #define EXT4_IOC_GROUP_ADD _IOW('f', 8,struct ext4_new_group_input)
>
> /*
> - * Structure of an inode on the disk
> - */
> -struct ext2_inode {
> - __u16 i_mode; /* File mode */
> - __u16 i_uid; /* Low 16 bits of Owner Uid */
> - __u32 i_size; /* Size in bytes */
> - __u32 i_atime; /* Access time */
> - __u32 i_ctime; /* Inode change time */
> - __u32 i_mtime; /* Modification time */
> - __u32 i_dtime; /* Deletion Time */
> - __u16 i_gid; /* Low 16 bits of Group Id */
> - __u16 i_links_count; /* Links count */
> - __u32 i_blocks; /* Blocks count */
> - __u32 i_flags; /* File flags */
> - union {
> - struct {
> - __u32 l_i_version; /* was l_i_reserved1 */
> - } linux1;
> - struct {
> - __u32 h_i_translator;
> - } hurd1;
> - } osd1; /* OS dependent 1 */
> - __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
> - __u32 i_generation; /* File version (for NFS) */
> - __u32 i_file_acl; /* File ACL */
> - __u32 i_size_high; /* Formerly i_dir_acl, directory ACL */
> - __u32 i_faddr; /* Fragment address */
> - union {
> - struct {
> - __u16 l_i_blocks_hi;
> - __u16 l_i_file_acl_high;
> - __u16 l_i_uid_high; /* these 2 fields */
> - __u16 l_i_gid_high; /* were reserved2[0] */
> - __u32 l_i_reserved2;
> - } linux2;
> - struct {
> - __u8 h_i_frag; /* Fragment number */
> - __u8 h_i_fsize; /* Fragment size */
> - __u16 h_i_mode_high;
> - __u16 h_i_uid_high;
> - __u16 h_i_gid_high;
> - __u32 h_i_author;
> - } hurd2;
> - } osd2; /* OS dependent 2 */
> -};
> -
> -/*
> * Permanent part of an large inode on the disk
> */
> struct ext2_inode_large {
> diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
> index dc83fb0..b290a1f 100644
> --- a/lib/ext2fs/ext2fs.h
> +++ b/lib/ext2fs/ext2fs.h
> @@ -229,9 +229,9 @@ struct struct_ext2_filsys {
> errcode_t (*check_directory)(ext2_filsys fs, ext2_ino_t ino);
> errcode_t (*write_bitmaps)(ext2_filsys fs);
> errcode_t (*read_inode)(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode);
> + struct ext2_inode_large *inode);
> errcode_t (*write_inode)(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode);
> + struct ext2_inode_large *inode);
> ext2_badblocks_list badblocks;
> ext2_dblist dblist;
> __u32 stride; /* for mke2fs */
> @@ -758,9 +758,9 @@ extern dgrp_t ext2fs_group_of_blk2(ext2_filsys fs, blk64_t);
> extern blk64_t ext2fs_group_first_block2(ext2_filsys fs, dgrp_t group);
> extern blk64_t ext2fs_group_last_block2(ext2_filsys fs, dgrp_t group);
> extern blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs,
> - struct ext2_inode *inode);
> + struct ext2_inode_large *inode);
> extern blk64_t ext2fs_inode_i_blocks(ext2_filsys fs,
> - struct ext2_inode *inode);
> + struct ext2_inode_large *inode);
> extern blk64_t ext2fs_blocks_count(struct ext2_super_block *super);
> extern void ext2fs_blocks_count_set(struct ext2_super_block *super,
> blk64_t blk);
> @@ -807,9 +807,11 @@ extern int ext2fs_bg_flags_test(ext2_filsys fs, dgrp_t group, __u16 bg_flag);
> extern void ext2fs_bg_flags_set(ext2_filsys fs, dgrp_t group, __u16 bg_flags);
> extern void ext2fs_bg_flags_clear(ext2_filsys fs, dgrp_t group, __u16 bg_flags);
> extern __u16 ext2fs_bg_checksum(ext2_filsys fs, dgrp_t group);
> -extern void ext2fs_bg_checksum_set(ext2_filsys fs, dgrp_t group, __u16 checksum);
> -extern blk64_t ext2fs_file_acl_block(const struct ext2_inode *inode);
> -extern void ext2fs_file_acl_block_set(struct ext2_inode *inode, blk64_t blk);
> +extern void ext2fs_bg_checksum_set(ext2_filsys fs, dgrp_t group,
> + __u16 checksum);
> +extern blk64_t ext2fs_file_acl_block(const struct ext2_inode_large *inode);
> +extern void ext2fs_file_acl_block_set(struct ext2_inode_large *inode,
> + blk64_t blk);
>
> /* block.c */
> extern errcode_t ext2fs_block_iterate(ext2_filsys fs,
> @@ -846,11 +848,11 @@ errcode_t ext2fs_block_iterate3(ext2_filsys fs,
>
> /* bmap.c */
> extern errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> char *block_buf, int bmap_flags,
> blk_t block, blk_t *phys_blk);
> extern errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> char *block_buf, int bmap_flags, blk64_t block,
> int *ret_flags, blk64_t *phys_blk);
>
> @@ -1017,7 +1019,7 @@ extern errcode_t ext2fs_extent_header_verify(void *ptr, int size);
> extern errcode_t ext2fs_extent_open(ext2_filsys fs, ext2_ino_t ino,
> ext2_extent_handle_t *handle);
> extern errcode_t ext2fs_extent_open2(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> ext2_extent_handle_t *ret_handle);
> extern void ext2fs_extent_free(ext2_extent_handle_t handle);
> extern errcode_t ext2fs_extent_get(ext2_extent_handle_t handle,
> @@ -1037,12 +1039,12 @@ extern errcode_t ext2fs_extent_goto(ext2_extent_handle_t handle,
>
> /* fileio.c */
> extern errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> int flags, ext2_file_t *ret);
> extern errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino,
> int flags, ext2_file_t *ret);
> extern ext2_filsys ext2fs_file_get_fs(ext2_file_t file);
> -struct ext2_inode *ext2fs_file_get_inode(ext2_file_t file);
> +struct ext2_inode_large *ext2fs_file_get_inode(ext2_file_t file);
> extern errcode_t ext2fs_file_close(ext2_file_t file);
> extern errcode_t ext2fs_file_flush(ext2_file_t file);
> extern errcode_t ext2fs_file_read(ext2_file_t file, void *buf,
> @@ -1147,11 +1149,12 @@ errcode_t ext2fs_get_device_sectsize(const char *file, int *sectsize);
> errcode_t ext2fs_get_device_phys_sectsize(const char *file, int *sectsize);
>
> /* i_block.c */
> -errcode_t ext2fs_iblk_add_blocks(ext2_filsys fs, struct ext2_inode *inode,
> +errcode_t ext2fs_iblk_add_blocks(ext2_filsys fs, struct ext2_inode_large *inode,
> blk64_t num_blocks);
> -errcode_t ext2fs_iblk_sub_blocks(ext2_filsys fs, struct ext2_inode *inode,
> +errcode_t ext2fs_iblk_sub_blocks(ext2_filsys fs, struct ext2_inode_large *inode,
> blk64_t num_blocks);
> -errcode_t ext2fs_iblk_set(ext2_filsys fs, struct ext2_inode *inode, blk64_t b);
> +errcode_t ext2fs_iblk_set(ext2_filsys fs, struct ext2_inode_large *inode,
> + blk64_t b);
>
> /* imager.c */
> extern errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags);
> @@ -1195,13 +1198,13 @@ errcode_t ext2fs_icount_validate(ext2_icount_t icount, FILE *);
> extern errcode_t ext2fs_flush_icache(ext2_filsys fs);
> extern errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan,
> ext2_ino_t *ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> int bufsize);
> extern errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks,
> ext2_inode_scan *ret_scan);
> extern void ext2fs_close_inode_scan(ext2_inode_scan scan);
> extern errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ext2_ino_t *ino,
> - struct ext2_inode *inode);
> + struct ext2_inode_large *inode);
> extern errcode_t ext2fs_inode_scan_goto_blockgroup(ext2_inode_scan scan,
> int group);
> extern void ext2fs_set_inode_callback
> @@ -1214,17 +1217,17 @@ extern void ext2fs_set_inode_callback
> extern int ext2fs_inode_scan_flags(ext2_inode_scan scan, int set_flags,
> int clear_flags);
> extern errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode,
> + struct ext2_inode_large *inode,
> int bufsize);
> extern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode);
> + struct ext2_inode_large *inode);
> extern errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode,
> + struct ext2_inode_large *inode,
> int bufsize);
> extern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode);
> + struct ext2_inode_large *inode);
> extern errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode);
> + struct ext2_inode_large *inode);
> extern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
> extern errcode_t ext2fs_check_directory(ext2_filsys fs, ext2_ino_t ino);
>
> @@ -1233,7 +1236,7 @@ extern io_manager inode_io_manager;
> extern errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino,
> char **name);
> extern errcode_t ext2fs_inode_io_intern2(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> char **name);
>
> /* ismounted.c */
> @@ -1243,7 +1246,7 @@ extern errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
>
> /* punch.c */
> extern errcode_t ext2fs_punch(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> char *block_buf, blk64_t start,
> blk64_t end);
>
> @@ -1341,11 +1344,11 @@ extern void ext2fs_swap_group_desc2(ext2_filsys, struct ext2_group_desc *gdp);
> extern void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
> struct ext2_inode_large *f, int hostorder,
> int bufsize);
> -extern void ext2fs_swap_inode(ext2_filsys fs,struct ext2_inode *t,
> - struct ext2_inode *f, int hostorder);
> +extern void ext2fs_swap_inode(ext2_filsys fs, struct ext2_inode_large *t,
> + struct ext2_inode_large *f, int hostorder);
>
> /* valid_blk.c */
> -extern int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode);
> +extern int ext2fs_inode_has_valid_blocks(struct ext2_inode_large *inode);
>
> /* version.c */
> extern int ext2fs_parse_version_string(const char *ver_string);
> @@ -1385,7 +1388,7 @@ extern int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino);
> extern blk_t ext2fs_group_first_block(ext2_filsys fs, dgrp_t group);
> extern blk_t ext2fs_group_last_block(ext2_filsys fs, dgrp_t group);
> extern blk_t ext2fs_inode_data_blocks(ext2_filsys fs,
> - struct ext2_inode *inode);
> + struct ext2_inode_large *inode);
> extern unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b);
> extern __u64 ext2fs_div64_ceil(__u64 a, __u64 b);
>
> @@ -1616,7 +1619,7 @@ _INLINE_ blk_t ext2fs_group_last_block(ext2_filsys fs, dgrp_t group)
> }
>
> _INLINE_ blk_t ext2fs_inode_data_blocks(ext2_filsys fs,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> return ext2fs_inode_data_blocks2(fs, inode);
> }
> diff --git a/lib/ext2fs/ext2fsP.h b/lib/ext2fs/ext2fsP.h
> index b182d7f..27c4332 100644
> --- a/lib/ext2fs/ext2fsP.h
> +++ b/lib/ext2fs/ext2fsP.h
> @@ -73,7 +73,7 @@ struct ext2_inode_cache {
>
> struct ext2_inode_cache_ent {
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> };
>
> /* Function prototypes */
> diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c
> index abb60dd..33f1a88 100644
> --- a/lib/ext2fs/extent.c
> +++ b/lib/ext2fs/extent.c
> @@ -52,8 +52,8 @@ struct ext2_extent_handle {
> errcode_t magic;
> ext2_filsys fs;
> ext2_ino_t ino;
> - struct ext2_inode *inode;
> - struct ext2_inode inodebuf;
> + struct ext2_inode_large *inode;
> + struct ext2_inode_large inodebuf;
> int type;
> int level;
> int max_depth;
> @@ -183,7 +183,7 @@ extern errcode_t ext2fs_extent_open(ext2_filsys fs, ext2_ino_t ino,
> }
>
> extern errcode_t ext2fs_extent_open2(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> ext2_extent_handle_t *ret_handle)
> {
> struct ext2_extent_handle *handle;
> diff --git a/lib/ext2fs/fileio.c b/lib/ext2fs/fileio.c
> index 324f046..6d139e5 100644
> --- a/lib/ext2fs/fileio.c
> +++ b/lib/ext2fs/fileio.c
> @@ -22,7 +22,7 @@ struct ext2_file {
> errcode_t magic;
> ext2_filsys fs;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> int flags;
> __u64 pos;
> blk64_t blockno;
> @@ -33,7 +33,7 @@ struct ext2_file {
> #define BMAP_BUFFER (file->buf + fs->blocksize)
>
> errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> int flags, ext2_file_t *ret)
> {
> ext2_file_t file;
> @@ -58,7 +58,7 @@ errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino,
> file->flags = flags & EXT2_FILE_MASK;
>
> if (inode) {
> - memcpy(&file->inode, inode, sizeof(struct ext2_inode));
> + memcpy(&file->inode, inode, sizeof(struct ext2_inode_large));
> } else {
> retval = ext2fs_read_inode(fs, ino, &file->inode);
> if (retval)
> @@ -98,7 +98,7 @@ ext2_filsys ext2fs_file_get_fs(ext2_file_t file)
> /*
> * This function returns the pointer to the inode of a file from the structure
> */
> -struct ext2_inode *ext2fs_file_get_inode(ext2_file_t file)
> +struct ext2_inode_large *ext2fs_file_get_inode(ext2_file_t file)
> {
> if (file->magic != EXT2_ET_MAGIC_EXT2_FILE)
> return NULL;
> diff --git a/lib/ext2fs/i_block.c b/lib/ext2fs/i_block.c
> index f36c3c4..1801570 100644
> --- a/lib/ext2fs/i_block.c
> +++ b/lib/ext2fs/i_block.c
> @@ -26,7 +26,7 @@
> #include "ext2_fs.h"
> #include "ext2fs.h"
>
> -errcode_t ext2fs_iblk_add_blocks(ext2_filsys fs, struct ext2_inode *inode,
> +errcode_t ext2fs_iblk_add_blocks(ext2_filsys fs, struct ext2_inode_large *inode,
> blk64_t num_blocks)
> {
> unsigned long long b = inode->i_blocks;
> @@ -50,7 +50,7 @@ errcode_t ext2fs_iblk_add_blocks(ext2_filsys fs, struct ext2_inode *inode,
> return 0;
> }
>
> -errcode_t ext2fs_iblk_sub_blocks(ext2_filsys fs, struct ext2_inode *inode,
> +errcode_t ext2fs_iblk_sub_blocks(ext2_filsys fs, struct ext2_inode_large *inode,
> blk64_t num_blocks)
> {
> unsigned long long b = inode->i_blocks;
> @@ -75,7 +75,8 @@ errcode_t ext2fs_iblk_sub_blocks(ext2_filsys fs, struct ext2_inode *inode,
> return 0;
> }
>
> -errcode_t ext2fs_iblk_set(ext2_filsys fs, struct ext2_inode *inode, blk64_t b)
> +errcode_t ext2fs_iblk_set(ext2_filsys fs, struct ext2_inode_large *inode,
> + blk64_t b)
> {
> if (!(fs->super->s_feature_ro_compat &
> EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ||
> diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
> index ccc2dee..96a93b9 100644
> --- a/lib/ext2fs/initialize.c
> +++ b/lib/ext2fs/initialize.c
> @@ -180,7 +180,7 @@ errcode_t ext2fs_initialize(const char *name, int flags,
> if (super->s_rev_level >= EXT2_DYNAMIC_REV) {
> set_field(s_first_ino, EXT2_GOOD_OLD_FIRST_INO);
> set_field(s_inode_size, EXT2_GOOD_OLD_INODE_SIZE);
> - if (super->s_inode_size >= sizeof(struct ext2_inode_large)) {
> + if (super->s_inode_size >= EXT2_GOOD_OLD_INODE_SIZE) {
> int extra_isize = sizeof(struct ext2_inode_large) -
> EXT2_GOOD_OLD_INODE_SIZE;
> set_field(s_min_extra_isize, extra_isize);
> diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
> index 829e032..76893fd 100644
> --- a/lib/ext2fs/inode.c
> +++ b/lib/ext2fs/inode.c
> @@ -402,13 +402,17 @@ static inline int is_empty_scan(ext2_inode_scan scan)
> #endif
>
> errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan, ext2_ino_t *ino,
> - struct ext2_inode *inode, int bufsize)
> + struct ext2_inode_large *inode,
> + int bufsize)
> {
> errcode_t retval;
> int extra_bytes = 0;
>
> EXT2_CHECK_MAGIC(scan, EXT2_ET_MAGIC_INODE_SCAN);
>
> + if (bufsize > scan->inode_size)
> + bufsize = scan->inode_size;
> +
> /*
> * Do we need to start reading a new block group?
> */
> @@ -482,7 +486,7 @@ errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan, ext2_ino_t *ino,
> (struct ext2_inode_large *) scan->temp_buffer,
> 0, bufsize);
> #else
> - *inode = *((struct ext2_inode *) scan->temp_buffer);
> + *inode = *((struct ext2_inode_large *) scan->temp_buffer);
> #endif
> if (scan->scan_flags & EXT2_SF_BAD_EXTRA_BYTES)
> retval = EXT2_ET_BAD_BLOCK_IN_INODE_TABLE;
> @@ -502,6 +506,8 @@ errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan, ext2_ino_t *ino,
> if (scan->scan_flags & EXT2_SF_BAD_INODE_BLK)
> retval = EXT2_ET_BAD_BLOCK_IN_INODE_TABLE;
> }
> + if (EXT2_INODE_SIZE(scan->fs->super) == EXT2_GOOD_OLD_INODE_SIZE)
> + inode->i_extra_isize = 0;
>
> scan->inodes_left--;
> scan->current_inode++;
> @@ -510,17 +516,17 @@ errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan, ext2_ino_t *ino,
> }
>
> errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ext2_ino_t *ino,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> return ext2fs_get_next_inode_full(scan, ino, inode,
> - sizeof(struct ext2_inode));
> + sizeof(struct ext2_inode_large));
> }
>
> /*
> * Functions to read and write a single inode.
> */
> errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode, int bufsize)
> + struct ext2_inode_large *inode, int bufsize)
> {
> blk64_t block_nr;
> unsigned long group, block, offset;
> @@ -546,7 +552,7 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
> return retval;
> }
> /* Check to see if it's in the inode cache */
> - if (bufsize == sizeof(struct ext2_inode)) {
> + if (bufsize == sizeof(struct ext2_inode_large)) {
> /* only old good inode can be retrieved from the cache */
> for (i=0; i < fs->icache->cache_size; i++) {
> if (fs->icache->cache[i].ino == ino) {
> @@ -581,6 +587,8 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
> if (bufsize < length)
> length = bufsize;
>
> + if (length == EXT2_GOOD_OLD_INODE_SIZE)
> + inode->i_extra_isize = 0;
> ptr = (char *) inode;
> while (length) {
> clen = length;
> @@ -620,14 +628,14 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
> }
>
> errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode)
> + struct ext2_inode_large *inode)
> {
> return ext2fs_read_inode_full(fs, ino, inode,
> - sizeof(struct ext2_inode));
> + sizeof(struct ext2_inode_large));
> }
>
> errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode * inode, int bufsize)
> + struct ext2_inode_large *inode, int bufsize)
> {
> blk64_t block_nr;
> unsigned long group, block, offset;
> @@ -678,9 +686,7 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
> memset(w_inode, 0, length);
>
> #ifdef WORDS_BIGENDIAN
> - ext2fs_swap_inode_full(fs, w_inode,
> - (struct ext2_inode_large *) inode,
> - 1, bufsize);
> + ext2fs_swap_inode_full(fs, w_inode, inode, 1, bufsize);
> #else
> memcpy(w_inode, inode, bufsize);
> #endif
> @@ -739,10 +745,10 @@ errout:
> }
>
> errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> return ext2fs_write_inode_full(fs, ino, inode,
> - sizeof(struct ext2_inode));
> + sizeof(struct ext2_inode_large));
> }
>
> /*
> @@ -750,9 +756,9 @@ errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
> * sure that extra part of large inodes is initialized properly.
> */
> errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> - struct ext2_inode *buf;
> + struct ext2_inode_large *buf;
> int size = EXT2_INODE_SIZE(fs->super);
> struct ext2_inode_large *large_inode;
> errcode_t retval;
> @@ -765,32 +771,20 @@ errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
> if (!inode->i_atime)
> inode->i_atime = t;
>
> - if (size == sizeof(struct ext2_inode))
> - return ext2fs_write_inode_full(fs, ino, inode,
> - sizeof(struct ext2_inode));
> -
> - buf = malloc(size);
> - if (!buf)
> - return ENOMEM;
> -
> - memset(buf, 0, size);
> - *buf = *inode;
> -
> - large_inode = (struct ext2_inode_large *) buf;
> - large_inode->i_extra_isize = sizeof(struct ext2_inode_large) -
> - EXT2_GOOD_OLD_INODE_SIZE;
> - if (!large_inode->i_crtime)
> - large_inode->i_crtime = t;
> + if (size > EXT2_GOOD_OLD_INODE_SIZE) {
> + inode->i_extra_isize = sizeof(struct ext2_inode_large) -
> + EXT2_GOOD_OLD_INODE_SIZE;
> + if (!inode->i_crtime)
> + inode->i_crtime = t;
> + }
>
> - retval = ext2fs_write_inode_full(fs, ino, buf, size);
> - free(buf);
> - return retval;
> + return ext2fs_write_inode_full(fs, ino, inode, size);
> }
>
>
> errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> int i;
> errcode_t retval;
>
> @@ -813,7 +807,7 @@ errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks)
>
> errcode_t ext2fs_check_directory(ext2_filsys fs, ext2_ino_t ino)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
>
> EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
> diff --git a/lib/ext2fs/inode_io.c b/lib/ext2fs/inode_io.c
> index b3e7ce5..bfd6028 100644
> --- a/lib/ext2fs/inode_io.c
> +++ b/lib/ext2fs/inode_io.c
> @@ -36,7 +36,7 @@ struct inode_private_data {
> ext2_file_t file;
> ext2_filsys fs;
> ext2_ino_t ino;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> int flags;
> struct inode_private_data *next;
> };
> @@ -80,7 +80,7 @@ static struct struct_io_manager struct_inode_manager = {
> io_manager inode_io_manager = &struct_inode_manager;
>
> errcode_t ext2fs_inode_io_intern2(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> char **name)
> {
> struct inode_private_data *data;
> @@ -96,7 +96,7 @@ errcode_t ext2fs_inode_io_intern2(ext2_filsys fs, ext2_ino_t ino,
> data->ino = ino;
> data->flags = 0;
> if (inode) {
> - memcpy(&data->inode, inode, sizeof(struct ext2_inode));
> + memcpy(&data->inode, inode, sizeof(struct ext2_inode_large));
> data->flags |= CHANNEL_HAS_INODE;
> }
> data->next = top_intern;
> diff --git a/lib/ext2fs/link.c b/lib/ext2fs/link.c
> index 0fd3ea8..a32ec03 100644
> --- a/lib/ext2fs/link.c
> +++ b/lib/ext2fs/link.c
> @@ -113,7 +113,7 @@ errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name,
> {
> errcode_t retval;
> struct link_struct ls;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
>
> diff --git a/lib/ext2fs/mkdir.c b/lib/ext2fs/mkdir.c
> index 9b6b799..08a0bd6 100644
> --- a/lib/ext2fs/mkdir.c
> +++ b/lib/ext2fs/mkdir.c
> @@ -35,7 +35,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
> {
> ext2_extent_handle_t handle;
> errcode_t retval;
> - struct ext2_inode parent_inode, inode;
> + struct ext2_inode_large parent_inode, inode;
> ext2_ino_t ino = inum;
> ext2_ino_t scratch_ino;
> blk64_t blk;
> @@ -80,7 +80,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
> /*
> * Create the inode structure....
> */
> - memset(&inode, 0, sizeof(struct ext2_inode));
> + memset(&inode, 0, sizeof(struct ext2_inode_large));
> inode.i_mode = LINUX_S_IFDIR | (0777 & ~fs->umask);
> inode.i_uid = inode.i_gid = 0;
> ext2fs_iblk_set(fs, &inode, 1);
> diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c
> index aaad2f6..33e58f7 100644
> --- a/lib/ext2fs/mkjournal.c
> +++ b/lib/ext2fs/mkjournal.c
> @@ -302,7 +302,7 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
> char *buf;
> dgrp_t group, start, end, i, log_flex;
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> unsigned long long inode_size;
> struct mkjournal_struct es;
>
> diff --git a/lib/ext2fs/namei.c b/lib/ext2fs/namei.c
> index bc0ae61..b1911e3 100644
> --- a/lib/ext2fs/namei.c
> +++ b/lib/ext2fs/namei.c
> @@ -31,7 +31,7 @@ static errcode_t follow_link(ext2_filsys fs, ext2_ino_t root, ext2_ino_t dir,
> char *pathname;
> char *buffer = 0;
> errcode_t retval;
> - struct ext2_inode ei;
> + struct ext2_inode_large ei;
>
> #ifdef NAMEI_DEBUG
> printf("follow_link: root=%lu, dir=%lu, inode=%lu, lc=%d\n",
> diff --git a/lib/ext2fs/punch.c b/lib/ext2fs/punch.c
> index 2f24b5e..b8bd816 100644
> --- a/lib/ext2fs/punch.c
> +++ b/lib/ext2fs/punch.c
> @@ -44,7 +44,7 @@ static int check_zero_block(char *buf, int blocksize)
> * each one, will recursively handle any indirect blocks and then
> * frees and deallocates the blocks.
> */
> -static errcode_t ind_punch(ext2_filsys fs, struct ext2_inode *inode,
> +static errcode_t ind_punch(ext2_filsys fs, struct ext2_inode_large *inode,
> char *block_buf, blk_t *p, int level,
> blk_t start, blk_t count, int max)
> {
> @@ -98,7 +98,8 @@ static errcode_t ind_punch(ext2_filsys fs, struct ext2_inode *inode,
> return ext2fs_iblk_sub_blocks(fs, inode, freed);
> }
>
> -static errcode_t ext2fs_punch_ind(ext2_filsys fs, struct ext2_inode *inode,
> +static errcode_t ext2fs_punch_ind(ext2_filsys fs,
> + struct ext2_inode_large *inode,
> char *block_buf, blk_t start, blk_t count)
> {
> errcode_t retval;
> @@ -176,7 +177,7 @@ static void dbg_print_extent(char *desc, struct ext2fs_extent *extent)
> #endif
>
> static errcode_t ext2fs_punch_extent(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> blk64_t start, blk64_t end)
> {
> ext2_extent_handle_t handle = 0;
> @@ -286,12 +287,12 @@ errout:
> * If end is ~0, then this is effectively truncate.
> */
> extern errcode_t ext2fs_punch(ext2_filsys fs, ext2_ino_t ino,
> - struct ext2_inode *inode,
> + struct ext2_inode_large *inode,
> char *block_buf, blk64_t start,
> blk64_t end)
> {
> errcode_t retval;
> - struct ext2_inode inode_buf;
> + struct ext2_inode_large inode_buf;
>
> if (start > end)
> return EINVAL;
> diff --git a/lib/ext2fs/read_bb.c b/lib/ext2fs/read_bb.c
> index e5d6322..40d0247 100644
> --- a/lib/ext2fs/read_bb.c
> +++ b/lib/ext2fs/read_bb.c
> @@ -65,7 +65,7 @@ errcode_t ext2fs_read_bb_inode(ext2_filsys fs, ext2_badblocks_list *bb_list)
> {
> errcode_t retval;
> struct read_bb_record rb;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> blk_t numblocks;
>
> EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
> diff --git a/lib/ext2fs/res_gdt.c b/lib/ext2fs/res_gdt.c
> index acce650..7a80512 100644
> --- a/lib/ext2fs/res_gdt.c
> +++ b/lib/ext2fs/res_gdt.c
> @@ -62,7 +62,7 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
> {
> errcode_t retval, retval2;
> struct ext2_super_block *sb;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> __u32 *dindir_buf, *gdt_buf;
> unsigned long long apb, inode_size;
> /* FIXME-64 - can't deal with extents */
> diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c
> index 87b1a2e..517f1d7 100644
> --- a/lib/ext2fs/swapfs.c
> +++ b/lib/ext2fs/swapfs.c
> @@ -210,11 +210,11 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
> t->i_file_acl = ext2fs_swab32(f->i_file_acl);
> if (hostorder)
> has_data_blocks = ext2fs_inode_data_blocks(fs,
> - (struct ext2_inode *) f);
> + (struct ext2_inode_large *) f);
> t->i_blocks = ext2fs_swab32(f->i_blocks);
> if (!hostorder)
> has_data_blocks = ext2fs_inode_data_blocks(fs,
> - (struct ext2_inode *) t);
> + (struct ext2_inode_large *) t);
> if (hostorder && (f->i_flags & EXT4_EXTENTS_FL))
> has_extents = 1;
> t->i_flags = ext2fs_swab32(f->i_flags);
> @@ -265,7 +265,7 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
> break;
> }
>
> - if (bufsize < (int) (sizeof(struct ext2_inode) + sizeof(__u16)))
> + if (bufsize < (int) (sizeof(struct ext2_inode_large) + sizeof(__u16)))
> return; /* no i_extra_isize field */
>
> if (hostorder)
> @@ -274,16 +274,16 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
> if (!hostorder)
> extra_isize = t->i_extra_isize;
> if (extra_isize > EXT2_INODE_SIZE(fs->super) -
> - sizeof(struct ext2_inode)) {
> + EXT2_GOOD_OLD_INODE_SIZE) {
> /* this is error case: i_extra_size is too large */
> return;
> }
>
> - i = sizeof(struct ext2_inode) + extra_isize + sizeof(__u32);
> + i = EXT2_GOOD_OLD_INODE_SIZE + extra_isize + sizeof(__u32);
> if (bufsize < (int) i)
> return; /* no space for EA magic */
>
> - eaf = (__u32 *) (((char *) f) + sizeof(struct ext2_inode) +
> + eaf = (__u32 *) (((char *) f) + EXT2_GOOD_OLD_INODE_SIZE +
> extra_isize);
>
> attr_magic = *eaf;
> @@ -293,23 +293,23 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t,
> if (attr_magic != EXT2_EXT_ATTR_MAGIC)
> return; /* it seems no magic here */
>
> - eat = (__u32 *) (((char *) t) + sizeof(struct ext2_inode) +
> + eat = (__u32 *) (((char *) t) + EXT2_GOOD_OLD_INODE_SIZE +
> extra_isize);
> *eat = ext2fs_swab32(*eaf);
>
> /* convert EA(s) */
> ext2fs_swap_ext_attr((char *) (eat + 1), (char *) (eaf + 1),
> - bufsize - sizeof(struct ext2_inode) -
> + bufsize - EXT2_GOOD_OLD_INODE_SIZE -
> extra_isize - sizeof(__u32), 0);
>
> }
>
> -void ext2fs_swap_inode(ext2_filsys fs, struct ext2_inode *t,
> - struct ext2_inode *f, int hostorder)
> +void ext2fs_swap_inode(ext2_filsys fs, struct ext2_inode_large *t,
> + struct ext2_inode_large *f, int hostorder)
> {
> ext2fs_swap_inode_full(fs, (struct ext2_inode_large *) t,
> (struct ext2_inode_large *) f, hostorder,
> - sizeof(struct ext2_inode));
> + sizeof(struct ext2_inode_large));
> }
>
> #endif
> diff --git a/lib/ext2fs/tst_iscan.c b/lib/ext2fs/tst_iscan.c
> index 64246d3..dcf81d1 100644
> --- a/lib/ext2fs/tst_iscan.c
> +++ b/lib/ext2fs/tst_iscan.c
> @@ -139,7 +139,7 @@ static void setup(void)
> */
> static void iterate(void)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_inode_scan scan;
> errcode_t retval;
> ext2_ino_t ino;
> diff --git a/lib/ext2fs/valid_blk.c b/lib/ext2fs/valid_blk.c
> index ec3edd8..9419166 100644
> --- a/lib/ext2fs/valid_blk.c
> +++ b/lib/ext2fs/valid_blk.c
> @@ -23,7 +23,7 @@
> * This function returns 1 if the inode's block entries actually
> * contain block entries.
> */
> -int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode)
> +int ext2fs_inode_has_valid_blocks(struct ext2_inode_large *inode)
> {
> /*
> * Only directories, regular files, and some symbolic links
> diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
> index 9a0dd46..7d74e84 100644
> --- a/misc/dumpe2fs.c
> +++ b/misc/dumpe2fs.c
> @@ -300,7 +300,7 @@ static void list_bad_blocks(ext2_filsys fs, int dump)
> static void print_inline_journal_information(ext2_filsys fs)
> {
> journal_superblock_t *jsb;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_file_t journal_file;
> errcode_t retval;
> ino_t ino = fs->super->s_journal_inum;
> diff --git a/misc/e2image.c b/misc/e2image.c
> index 83a9d02..56a5321 100644
> --- a/misc/e2image.c
> +++ b/misc/e2image.c
> @@ -232,7 +232,7 @@ struct process_block_struct {
> * the inode again.
> */
> static ino_t stashed_ino = 0;
> -static struct ext2_inode *stashed_inode;
> +static struct ext2_inode_large *stashed_inode;
>
> static errcode_t meta_get_blocks(ext2_filsys fs EXT2FS_ATTR((unused)),
> ext2_ino_t ino,
> @@ -261,7 +261,7 @@ static errcode_t meta_check_directory(ext2_filsys fs EXT2FS_ATTR((unused)),
>
> static errcode_t meta_read_inode(ext2_filsys fs EXT2FS_ATTR((unused)),
> ext2_ino_t ino,
> - struct ext2_inode *inode)
> + struct ext2_inode_large *inode)
> {
> if ((ino != stashed_ino) || !stashed_inode)
> return EXT2_ET_CALLBACK_NOTHANDLED;
> @@ -1032,7 +1032,7 @@ static void output_qcow2_meta_data_blocks(ext2_filsys fs, int fd)
> static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
> {
> struct process_block_struct pb;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_inode_scan scan;
> ext2_ino_t ino;
> errcode_t retval;
> diff --git a/misc/e2initrd_helper.c b/misc/e2initrd_helper.c
> index eaf9ce6..3d1535b 100644
> --- a/misc/e2initrd_helper.c
> +++ b/misc/e2initrd_helper.c
> @@ -75,7 +75,7 @@ static errcode_t get_file(ext2_filsys fs, const char * filename,
> char *buf;
> ext2_file_t e2_file;
> unsigned int got;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_ino_t ino;
>
> ret_file->buf = 0;
> diff --git a/misc/mke2fs.c b/misc/mke2fs.c
> index e062bda..2d57d09 100644
> --- a/misc/mke2fs.c
> +++ b/misc/mke2fs.c
> @@ -352,7 +352,7 @@ static void write_inode_tables(ext2_filsys fs, int lazy_flag, int itable_zeroed)
> static void create_root_dir(ext2_filsys fs)
> {
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> __u32 uid, gid;
>
> retval = ext2fs_mkdir(fs, EXT2_ROOT_INO, EXT2_ROOT_INO, 0);
> diff --git a/misc/tune2fs.c b/misc/tune2fs.c
> index 5bf5187..82833ad 100644
> --- a/misc/tune2fs.c
> +++ b/misc/tune2fs.c
> @@ -275,7 +275,7 @@ static int release_blocks_proc(ext2_filsys fs, blk64_t *blocknr,
> */
> static void remove_journal_inode(ext2_filsys fs)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
> ino_t ino = fs->super->s_journal_inum;
>
> @@ -1209,7 +1209,7 @@ static int inode_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap)
> ext2_ino_t ino;
> blk64_t blk;
> char *block_buf = 0;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_inode_scan scan = NULL;
>
> retval = ext2fs_get_mem(fs->blocksize * 3, &block_buf);
> diff --git a/resize/resize2fs.c b/resize/resize2fs.c
> index 45ea5f4..d35be59 100644
> --- a/resize/resize2fs.c
> +++ b/resize/resize2fs.c
> @@ -1234,7 +1234,7 @@ errout:
> struct process_block_struct {
> ext2_resize_t rfs;
> ext2_ino_t ino;
> - struct ext2_inode * inode;
> + struct ext2_inode_large *inode;
> errcode_t error;
> int is_dir;
> int changed;
> @@ -1309,7 +1309,7 @@ static errcode_t inode_scan_and_fix(ext2_resize_t rfs)
> {
> struct process_block_struct pb;
> ext2_ino_t ino, new_inode;
> - struct ext2_inode *inode = NULL;
> + struct ext2_inode_large *inode = NULL;
> ext2_inode_scan scan = NULL;
> errcode_t retval;
> char *block_buf = 0;
> @@ -1475,7 +1475,7 @@ static int check_and_change_inodes(ext2_ino_t dir,
> void *priv_data)
> {
> struct istruct *is = (struct istruct *) priv_data;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> ext2_ino_t new_inode;
> errcode_t retval;
>
> @@ -1712,7 +1712,7 @@ errout:
> */
> static errcode_t fix_resize_inode(ext2_filsys fs)
> {
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
> errcode_t retval;
> char * block_buf;
>
> @@ -1866,7 +1866,7 @@ static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
> static errcode_t fix_sb_journal_backup(ext2_filsys fs)
> {
> errcode_t retval;
> - struct ext2_inode inode;
> + struct ext2_inode_large inode;
>
> if (!(fs->super->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL))
> return 0;
>
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists