[UPDATE][19/24]large files and filesystem support

From: sho
Date: Thu May 25 2006 - 08:56:03 EST


Summary of this patch:
[19/24] large files and filesystem support
- This fixes what remains unmodified.

Signed-off-by: Takashi Sato sho@xxxxxxxxxxxxxx
---
diff -upNr e2fsprogs-1.39/debugfs/logdump.c e2fsprogs-1.39.tmp/debugfs/logdump.c
--- e2fsprogs-1.39/debugfs/logdump.c 2006-05-25 19:42:12.691989253 +0900
+++ e2fsprogs-1.39.tmp/debugfs/logdump.c 2006-05-25 19:43:29.902925807 +0900
@@ -339,7 +339,7 @@ static void dump_journal(char *cmdname,
journal_header_t *header;

tid_t transaction;
- unsigned int blocknr = 0;
+ blk_t blocknr = 0;

/* First, check to see if there's an ext2 superblock header */
retval = read_journal_block(cmdname, source, 0,
diff -upNr e2fsprogs-1.39/e2fsck/e2fsck.h e2fsprogs-1.39.tmp/e2fsck/e2fsck.h
--- e2fsprogs-1.39/e2fsck/e2fsck.h 2006-03-19 11:33:55.000000000 +0900
+++ e2fsprogs-1.39.tmp/e2fsck/e2fsck.h 2006-05-25 19:43:29.903902369 +0900
@@ -94,7 +94,7 @@ struct dir_info {
*/
struct dx_dir_info {
ext2_ino_t ino; /* Inode number */
- int numblocks; /* number of blocks */
+ blk_t numblocks; /* number of blocks */
int hashversion;
short depth; /* depth of tree */
struct dx_dirblock_info *dx_block; /* Array of size numblocks */
diff -upNr e2fsprogs-1.39/e2fsck/emptydir.c e2fsprogs-1.39.tmp/e2fsck/emptydir.c
--- e2fsprogs-1.39/e2fsck/emptydir.c 2006-05-25 19:43:18.326754074 +0900
+++ e2fsprogs-1.39.tmp/e2fsck/emptydir.c 2006-05-25 19:43:29.903902369 +0900
@@ -167,9 +167,10 @@ static int fix_directory(ext2_filsys fs,
return 0;

if (edi->freed_blocks) {
- edi->inode.i_size -= edi->freed_blocks * fs->blocksize;
- edi->inode.i_blocks -= edi->freed_blocks *
- (fs->blocksize / i_blocks_base(fs, &edi->inode));
+ edi->inode.i_size -= (unsigned long long)edi->freed_blocks *
+ fs->blocksize;
+ edi->inode.i_blocks -= (unsigned long long)edi->freed_blocks *
+ (fs->blocksize / i_blocks_base(fs, &edi->inode));
(void) ext2fs_write_inode(fs, db->ino, &edi->inode);
}
return 0;
diff -upNr e2fsprogs-1.39/e2fsck/extend.c e2fsprogs-1.39.tmp/e2fsck/extend.c
--- e2fsprogs-1.39/e2fsck/extend.c 2005-09-06 18:40:14.000000000 +0900
+++ e2fsprogs-1.39.tmp/e2fsck/extend.c 2006-05-25 19:43:29.904878932 +0900
@@ -57,7 +57,7 @@ int main(int argc, char **argv)
perror(filename);
exit(1);
}
- ret = lseek(fd, nblocks*blocksize, SEEK_SET);
+ ret = ext2fs_llseek(fd, (off_t)nblocks*blocksize, SEEK_SET);
if (ret < 0) {
perror("lseek");
exit(1);
@@ -67,7 +67,7 @@ int main(int argc, char **argv)
perror("read");
exit(1);
}
- ret = lseek(fd, nblocks*blocksize, SEEK_SET);
+ ret = ext2fs_llseek(fd, (off_t)nblocks*blocksize, SEEK_SET);
if (ret < 0) {
perror("lseek #2");
exit(1);
diff -upNr e2fsprogs-1.39/e2fsck/pass2.c e2fsprogs-1.39.tmp/e2fsck/pass2.c
--- e2fsprogs-1.39/e2fsck/pass2.c 2006-05-25 19:43:18.328707199 +0900
+++ e2fsprogs-1.39.tmp/e2fsck/pass2.c 2006-05-25 19:43:29.905855494 +0900
@@ -97,7 +97,7 @@ void e2fsck_pass2(e2fsck_t ctx)
struct check_dir_struct cd;
struct dx_dir_info *dx_dir;
struct dx_dirblock_info *dx_db, *dx_parent;
- int b;
+ blk_t b;
int i, depth;
problem_t code;
int bad_dir;
diff -upNr e2fsprogs-1.39/lib/ext2fs/bmap.c e2fsprogs-1.39.tmp/lib/ext2fs/bmap.c
--- e2fsprogs-1.39/lib/ext2fs/bmap.c 2006-05-25 19:43:18.332613448 +0900
+++ e2fsprogs-1.39.tmp/lib/ext2fs/bmap.c 2006-05-25 19:43:29.905855494 +0900
@@ -260,7 +260,8 @@ done:
if (buf)
ext2fs_free_mem(&buf);
if ((retval == 0) && (blocks_alloc || inode_dirty)) {
- inode->i_blocks += (blocks_alloc * fs->blocksize) / i_blocks_base(fs, inode);
+ inode->i_blocks += ((e2_blkcnt_t)blocks_alloc *
+ fs->blocksize) / i_blocks_base(fs, inode);
retval = ext2fs_write_inode(fs, ino, inode);
}
return retval;
diff -upNr e2fsprogs-1.39/lib/ext2fs/ext2_io.h e2fsprogs-1.39.tmp/lib/ext2fs/ext2_io.h
--- e2fsprogs-1.39/lib/ext2fs/ext2_io.h 2006-03-18 12:48:25.000000000 +0900
+++ e2fsprogs-1.39.tmp/lib/ext2fs/ext2_io.h 2006-05-25 19:43:29.906832057 +0900
@@ -90,7 +90,7 @@ struct struct_io_manager {
extern errcode_t io_channel_set_options(io_channel channel,
const char *options);
extern errcode_t io_channel_write_byte(io_channel channel,
- unsigned long offset,
+ ext2_loff_t offset,
int count, const void *data);

/* unix_io.c */
diff -upNr e2fsprogs-1.39/lib/ext2fs/inode.c e2fsprogs-1.39.tmp/lib/ext2fs/inode.c
--- e2fsprogs-1.39/lib/ext2fs/inode.c 2005-09-06 18:40:14.000000000 +0900
+++ e2fsprogs-1.39.tmp/lib/ext2fs/inode.c 2006-05-25 19:43:29.906832057 +0900
@@ -495,7 +495,8 @@ errcode_t ext2fs_get_next_inode(ext2_ino
errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
struct ext2_inode * inode, int bufsize)
{
- unsigned long group, block, block_nr, offset;
+ unsigned long group, offset;
+ e2_blkcnt_t block, block_nr;
char *ptr;
errcode_t retval;
int clen, i, inodes_per_block, length;
diff -upNr e2fsprogs-1.39/lib/ext2fs/inode_io.c e2fsprogs-1.39.tmp/lib/ext2fs/inode_io.c
--- e2fsprogs-1.39/lib/ext2fs/inode_io.c 2005-09-06 18:40:14.000000000 +0900
+++ e2fsprogs-1.39.tmp/lib/ext2fs/inode_io.c 2006-05-25 19:43:29.907808619 +0900
@@ -207,9 +207,9 @@ static errcode_t inode_read_blk(io_chann
data = (struct inode_private_data *) channel->private_data;
EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_INODE_IO_CHANNEL);

- if ((retval = ext2fs_file_lseek(data->file,
- block * channel->block_size,
- EXT2_SEEK_SET, 0)))
+ if ((retval = ext2fs_file_llseek(data->file,
+ (unsigned long long)block *
+ channel->block_size,EXT2_SEEK_SET, 0)))
return retval;

count = (count < 0) ? -count : (count * channel->block_size);
@@ -227,9 +227,9 @@ static errcode_t inode_write_blk(io_chan
data = (struct inode_private_data *) channel->private_data;
EXT2_CHECK_MAGIC(data, EXT2_ET_MAGIC_INODE_IO_CHANNEL);

- if ((retval = ext2fs_file_lseek(data->file,
- block * channel->block_size,
- EXT2_SEEK_SET, 0)))
+ if ((retval = ext2fs_file_llseek(data->file,
+ (unsigned long long)block *
+ channel->block_size,EXT2_SEEK_SET, 0)))
return retval;

count = (count < 0) ? -count : (count * channel->block_size);
diff -upNr e2fsprogs-1.39/lib/ext2fs/io_manager.c e2fsprogs-1.39.tmp/lib/ext2fs/io_manager.c
--- e2fsprogs-1.39/lib/ext2fs/io_manager.c 2005-09-06 18:40:14.000000000 +0900
+++ e2fsprogs-1.39.tmp/lib/ext2fs/io_manager.c 2006-05-25 19:43:29.907808619 +0900
@@ -56,7 +56,7 @@ errcode_t io_channel_set_options(io_chan
return retval;
}

-errcode_t io_channel_write_byte(io_channel channel, unsigned long offset,
+errcode_t io_channel_write_byte(io_channel channel, ext2_loff_t offset,
int count, const void *data)
{
EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
diff -upNr e2fsprogs-1.39/lib/ext2fs/tst_getsectsize.c e2fsprogs-1.39.tmp/lib/ext2fs/tst_getsectsize.c
--- e2fsprogs-1.39/lib/ext2fs/tst_getsectsize.c 2005-09-06 18:40:14.000000000 +0900
+++ e2fsprogs-1.39.tmp/lib/ext2fs/tst_getsectsize.c 2006-05-25 19:43:29.907808619 +0900
@@ -27,8 +27,8 @@

int main(int argc, char **argv)
{
- int sectsize;
- int retval;
+ unsigned sectsize;
+ int retval;

if (argc < 2) {
fprintf(stderr, "Usage: %s device\n", argv[0]);
diff -upNr e2fsprogs-1.39/lib/ext2fs/tst_getsize.c e2fsprogs-1.39.tmp/lib/ext2fs/tst_getsize.c
--- e2fsprogs-1.39/lib/ext2fs/tst_getsize.c 2005-09-06 18:40:14.000000000 +0900
+++ e2fsprogs-1.39.tmp/lib/ext2fs/tst_getsize.c 2006-05-25 19:43:29.908785182 +0900
@@ -39,6 +39,6 @@ int main(int argc, const char *argv[])
com_err(argv[0], retval, "while getting device size");
exit(1);
}
- printf("%s is device has %d blocks.\n", argv[1], blocks);
+ printf("%s is device has %u blocks.\n", argv[1], blocks);
return 0;
}
diff -upNr e2fsprogs-1.39/misc/e2image.c e2fsprogs-1.39.tmp/misc/e2image.c
--- e2fsprogs-1.39/misc/e2image.c 2006-05-25 19:42:12.708590815 +0900
+++ e2fsprogs-1.39.tmp/misc/e2image.c 2006-05-25 19:43:29.909761744 +0900
@@ -63,8 +63,8 @@ static void write_header(int fd, struct
exit(1);
}

- if (lseek(fd, 0, SEEK_SET) < 0) {
- perror("lseek while writing header");
+ if (ext2fs_llseek(fd, 0, SEEK_SET) < 0) {
+ perror("ext2fs_llseek while writing header");
exit(1);
}
memset(header_buf, 0, blocksize);
@@ -94,14 +94,14 @@ static void write_image_file(ext2_filsys
write_header(fd, NULL, fs->blocksize);
memset(&hdr, 0, sizeof(struct ext2_image_hdr));

- hdr.offset_super = lseek(fd, 0, SEEK_CUR);
+ hdr.offset_super = ext2fs_llseek(fd, 0, SEEK_CUR);
retval = ext2fs_image_super_write(fs, fd, 0);
if (retval) {
com_err(program_name, retval, _("while writing superblock"));
exit(1);
}

- hdr.offset_inode = lseek(fd, 0, SEEK_CUR);
+ hdr.offset_inode = ext2fs_llseek(fd, 0, SEEK_CUR);
retval = ext2fs_image_inode_write(fs, fd,
(fd != 1) ? IMAGER_FLAG_SPARSEWRITE : 0);
if (retval) {
@@ -109,14 +109,14 @@ static void write_image_file(ext2_filsys
exit(1);
}

- hdr.offset_blockmap = lseek(fd, 0, SEEK_CUR);
+ hdr.offset_blockmap = ext2fs_llseek(fd, 0, SEEK_CUR);
retval = ext2fs_image_bitmap_write(fs, fd, 0);
if (retval) {
com_err(program_name, retval, _("while writing block bitmap"));
exit(1);
}

- hdr.offset_inodemap = lseek(fd, 0, SEEK_CUR);
+ hdr.offset_inodemap = ext2fs_llseek(fd, 0, SEEK_CUR);
retval = ext2fs_image_bitmap_write(fs, fd, IMAGER_FLAG_INODEMAP);
if (retval) {
com_err(program_name, retval, _("while writing inode bitmap"));
@@ -307,7 +307,7 @@ static int check_zero_block(char *buf, i
return 1;
}

-static void write_block(int fd, char *buf, int sparse_offset,
+static void write_block(int fd, char *buf, ext2_loff_t sparse_offset,
int blocksize, blk_t block)
{
int count;
@@ -316,7 +316,7 @@ static void write_block(int fd, char *bu
if (sparse_offset) {
#ifdef HAVE_LSEEK64
if (lseek64(fd, sparse_offset, SEEK_CUR) < 0)
- perror("lseek");
+ perror("lseek64");
#else
if (lseek(fd, sparse_offset, SEEK_CUR) < 0)
perror("lseek");
@@ -575,8 +575,11 @@ static void install_image(char *device,
exit(1);
}

-
+#ifdef HAVE_OPEN64
+ fd = open64(image_fn, O_RDONLY);
+#else
fd = open(image_fn, O_RDONLY);
+#endif
if (fd < 0) {
perror(image_fn);
exit(1);
@@ -592,8 +595,8 @@ static void install_image(char *device,

ext2fs_rewrite_to_io(fs, io);

- if (lseek(fd, fs->image_header->offset_inode, SEEK_SET) < 0) {
- perror("lseek");
+ if (ext2fs_llseek(fd, fs->image_header->offset_inode, SEEK_SET) < 0) {
+ perror("lseek64");
exit(1);
}

diff -upNr e2fsprogs-1.39/misc/filefrag.c e2fsprogs-1.39.tmp/misc/filefrag.c
--- e2fsprogs-1.39/misc/filefrag.c 2005-12-11 09:18:45.000000000 +0900
+++ e2fsprogs-1.39.tmp/misc/filefrag.c 2006-05-25 19:43:29.909761744 +0900
@@ -38,6 +38,7 @@ extern int optind;
#include <sys/vfs.h>
#include <sys/ioctl.h>
#include <linux/fd.h>
+#include <ext2fs/ext2fs.h>

int verbose = 0;

@@ -96,7 +97,8 @@ static void frag_report(const char *file
if (verbose) {
printf("Filesystem type is: %x\n", fsinfo.f_type);
}
- cylgroups = (fsinfo.f_blocks + fsinfo.f_bsize*8-1) / fsinfo.f_bsize*8;
+ cylgroups = ((long long)fsinfo.f_blocks + fsinfo.f_bsize*8-1) /
+ fsinfo.f_bsize*8;
if (verbose) {
printf("Filesystem cylinder groups is approximately %ld\n",
cylgroups);


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/