From: Andreas Dilger Subject: Re: [PATCH 01/37] e2fsprogs: Read and write full-sized inodes Date: Sat, 3 Sep 2011 12:05:39 -0600 Message-ID: <0151C905-AE23-4729-92B9-9EAFA44A92FD@dilger.ca> References: <20110901003509.1176.51159.stgit@elm3c44.beaverton.ibm.com> <20110901003517.1176.46651.stgit@elm3c44.beaverton.ibm.com> Mime-Version: 1.0 (iPhone Mail 8L1) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8BIT Cc: Andreas Dilger , Theodore Tso , "Darrick J. Wong" , Sunil Mushran , Amir Goldstein , Andi Kleen , Mingming Cao , Joel Becker , "linux-ext4@vger.kernel.org" , Coly Li To: "Darrick J. Wong" Return-path: Received: from to5email.gprs.rogers.com ([74.198.8.2]:48078 "EHLO to5email1.gprs.rogers.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753536Ab1ICSOU convert rfc822-to-8bit (ORCPT ); Sat, 3 Sep 2011 14:14:20 -0400 In-Reply-To: <20110901003517.1176.46651.stgit@elm3c44.beaverton.ibm.com> Sender: linux-ext4-owner@vger.kernel.org List-ID: 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" 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 > --- > 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", > " [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", > " ", 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", > "", 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}. > > -@deftypefun errcode_t ext2fs_file_open2 (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@var{inode}, int @var{flags}, ext2_file_t *@var{ret}) > +@deftypefun errcode_t ext2fs_file_open2 (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode_large *@var{inode}, int @var{flags}, ext2_file_t *@var{ret}) > @deftypefunx errcode_t ext2fs_file_open (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, int @var{flags}, ext2_file_t *@var{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 > > -@deftypefun errcode_t ext2fs_read_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@var{inode}) > +@deftypefun errcode_t ext2fs_read_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode_large *@var{inode}) > Read the inode number @var{ino} into @var{inode}. > @end deftypefun > > -@deftypefun errcode_t ext2fs_write_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@var{inode}) > +@deftypefun errcode_t ext2fs_write_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode_large *@var{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 > > -@deftypefun errcode_t ext2fs_get_next_inode (ext2_inode_scan @var{scan}, ext2_ino_t *@var{ino}, struct ext2_inode *@var{inode}) > +@deftypefun errcode_t ext2fs_get_next_inode (ext2_inode_scan @var{scan}, ext2_ino_t *@var{ino}, struct ext2_inode_large *@var{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 > > -@deftypefun int ext2fs_inode_has_valid_blocks (struct ext2_inode *@var{inode}) > +@deftypefun int ext2fs_inode_has_valid_blocks (struct ext2_inode_large *@var{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 *@var{gdp}) > @end deftypefun > > -@deftypefun void ext2fs_swap_inode (ext2_filsys @var{fs}, struct ext2_inode *@var{to}, struct ext2_inode *@var{from}, int @var{hostorder}) > +@deftypefun void ext2fs_swap_inode (ext2_filsys @var{fs}, struct ext2_inode_large *@var{to}, struct ext2_inode_large *@var{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. > > > > -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: > > 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: > > > > -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 - 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; >