Whamcloud - gitweb
libext2fs: More random 64-bit fixes, lots of block_iterate3
authorValerie Aurora Henson <vaurora@redhat.com>
Sun, 13 Jun 2010 15:00:00 +0000 (11:00 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 13 Jun 2010 15:00:00 +0000 (11:00 -0400)
Signed-off-by: Valerie Aurora Henson <vaurora@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
13 files changed:
lib/ext2fs/bmove.c
lib/ext2fs/check_desc.c
lib/ext2fs/expanddir.c
lib/ext2fs/ext2fs.h
lib/ext2fs/extent.c
lib/ext2fs/imager.c
lib/ext2fs/mkdir.c
lib/ext2fs/mkjournal.c
lib/ext2fs/namei.c
lib/ext2fs/openfs.c
lib/ext2fs/read_bb.c
lib/ext2fs/read_bb_file.c
lib/ext2fs/res_gdt.c

index f85baca..deabf38 100644 (file)
@@ -36,14 +36,14 @@ struct process_block_struct {
        int                     flags;
 };
 
-static int process_block(ext2_filsys fs, blk_t *block_nr,
-                        e2_blkcnt_t blockcnt, blk_t ref_block,
+static int process_block(ext2_filsys fs, blk64_t *block_nr,
+                        e2_blkcnt_t blockcnt, blk64_t ref_block,
                         int ref_offset, void *priv_data)
 {
        struct process_block_struct *pb;
        errcode_t       retval;
        int             ret;
-       blk_t           block, orig;
+       blk64_t         block, orig;
 
        pb = (struct process_block_struct *) priv_data;
        block = orig = *block_nr;
@@ -77,12 +77,14 @@ static int process_block(ext2_filsys fs, blk_t      *block_nr,
                ext2fs_mark_block_bitmap2(pb->alloc_map, block);
                ret = BLOCK_CHANGED;
                if (pb->flags & EXT2_BMOVE_DEBUG)
-                       printf("ino=%ld, blockcnt=%lld, %u->%u\n", pb->ino,
-                              blockcnt, orig, block);
+                       printf("ino=%u, blockcnt=%lld, %llu->%llu\n",
+                              (unsigned) pb->ino, blockcnt, 
+                              (unsigned long long) orig,
+                              (unsigned long long) block);
        }
        if (pb->add_dir) {
-               retval = ext2fs_add_dir_block(fs->dblist, pb->ino,
-                                             block, (int) blockcnt);
+               retval = ext2fs_add_dir_block2(fs->dblist, pb->ino,
+                                              block, blockcnt);
                if (retval) {
                        pb->error = retval;
                        ret |= BLOCK_ABORT;
@@ -147,8 +149,8 @@ errcode_t ext2fs_move_blocks(ext2_filsys fs,
                pb.add_dir = (LINUX_S_ISDIR(inode.i_mode) &&
                              flags & EXT2_BMOVE_GET_DBLIST);
 
-               retval = ext2fs_block_iterate2(fs, ino, 0, block_buf,
-                                             process_block, &pb);
+               retval = ext2fs_block_iterate3(fs, ino, 0, block_buf,
+                                              process_block, &pb);
                if (retval)
                        return retval;
                if (pb.error)
index f42b6fe..7929cd9 100644 (file)
@@ -34,8 +34,8 @@ errcode_t ext2fs_check_desc(ext2_filsys fs)
        ext2fs_block_bitmap bmap;
        errcode_t retval;
        dgrp_t i;
-       blk_t first_block = fs->super->s_first_data_block;
-       blk_t last_block = ext2fs_blocks_count(fs->super)-1;
+       blk64_t first_block = fs->super->s_first_data_block;
+       blk64_t last_block = ext2fs_blocks_count(fs->super)-1;
        blk64_t blk, b;
        int j;
 
index d41d95e..7673a3b 100644 (file)
@@ -25,15 +25,15 @@ struct expand_dir_struct {
 };
 
 static int expand_dir_proc(ext2_filsys fs,
-                          blk_t        *blocknr,
+                          blk64_t      *blocknr,
                           e2_blkcnt_t  blockcnt,
-                          blk_t        ref_block EXT2FS_ATTR((unused)),
+                          blk64_t      ref_block EXT2FS_ATTR((unused)),
                           int          ref_offset EXT2FS_ATTR((unused)),
                           void         *priv_data)
 {
        struct expand_dir_struct *es = (struct expand_dir_struct *) priv_data;
-       blk_t   new_blk;
-       static blk_t    last_blk = 0;
+       blk64_t new_blk;
+       static blk64_t  last_blk = 0;
        char            *block;
        errcode_t       retval;
 
@@ -41,7 +41,7 @@ static int expand_dir_proc(ext2_filsys        fs,
                last_blk = *blocknr;
                return 0;
        }
-       retval = ext2fs_new_block(fs, last_blk, 0, &new_blk);
+       retval = ext2fs_new_block2(fs, last_blk, 0, &new_blk);
        if (retval) {
                es->err = retval;
                return BLOCK_ABORT;
@@ -100,7 +100,7 @@ errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir)
        es.err = 0;
        es.newblocks = 0;
 
-       retval = ext2fs_block_iterate2(fs, dir, BLOCK_FLAG_APPEND,
+       retval = ext2fs_block_iterate3(fs, dir, BLOCK_FLAG_APPEND,
                                       0, expand_dir_proc, &es);
 
        if (es.err)
index d1c2110..38693b7 100644 (file)
@@ -210,6 +210,7 @@ struct struct_ext2_filsys {
        int                             inode_blocks_per_group;
        ext2fs_inode_bitmap             inode_map;
        ext2fs_block_bitmap             block_map;
+       /* XXX FIXME-64: not 64-bit safe, but not used? */
        errcode_t (*get_blocks)(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
        errcode_t (*check_directory)(ext2_filsys fs, ext2_ino_t ino);
        errcode_t (*write_bitmaps)(ext2_filsys fs);
index 590afce..030d73a 100644 (file)
@@ -285,7 +285,7 @@ errcode_t ext2fs_extent_get(ext2_extent_handle_t handle,
        struct ext3_extent_idx          *ix = 0;
        struct ext3_extent              *ex;
        errcode_t                       retval;
-       blk_t                           blk;
+       blk64_t                         blk;
        blk64_t                         end_blk;
        int                             orig_op, op;
 
@@ -819,7 +819,7 @@ errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle,
 static errcode_t extent_node_split(ext2_extent_handle_t handle)
 {
        errcode_t                       retval = 0;
-       blk_t                           new_node_pblk;
+       blk64_t                         new_node_pblk;
        blk64_t                         new_node_start;
        blk64_t                         orig_lblk;
        blk64_t                         goal_blk = 0;
@@ -934,7 +934,7 @@ static errcode_t extent_node_split(ext2_extent_handle_t handle)
                goal_blk = (group * handle->fs->super->s_blocks_per_group) +
                        handle->fs->super->s_first_data_block;
        }
-       retval = ext2fs_alloc_block(handle->fs, (blk_t) goal_blk, block_buf,
+       retval = ext2fs_alloc_block2(handle->fs, goal_blk, block_buf,
                                    &new_node_pblk);
        if (retval)
                goto done;
index 053917f..5a6d0b9 100644 (file)
@@ -62,7 +62,7 @@ errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags)
 {
        unsigned int    group, left, c, d;
        char            *buf, *cp;
-       blk_t           blk;
+       blk64_t         blk;
        ssize_t         actual;
        errcode_t       retval;
 
@@ -136,7 +136,7 @@ errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd,
 {
        unsigned int    group, c, left;
        char            *buf;
-       blk_t           blk;
+       blk64_t         blk;
        ssize_t         actual;
        errcode_t       retval;
 
index a15b7bc..86c65da 100644 (file)
@@ -37,7 +37,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
        struct ext2_inode       parent_inode, inode;
        ext2_ino_t              ino = inum;
        ext2_ino_t              scratch_ino;
-       blk_t                   blk;
+       blk64_t                 blk;
        char                    *block = 0;
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
@@ -55,7 +55,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
        /*
         * Allocate a data block for the directory
         */
-       retval = ext2fs_new_block(fs, 0, 0, &blk);
+       retval = ext2fs_new_block2(fs, 0, 0, &blk);
        if (retval)
                goto cleanup;
 
@@ -83,6 +83,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
        inode.i_mode = LINUX_S_IFDIR | (0777 & ~fs->umask);
        inode.i_uid = inode.i_gid = 0;
        ext2fs_iblk_set(fs, &inode, 1);
+       /* FIXME-64 */
        inode.i_block[0] = blk;
        inode.i_links_count = 2;
        inode.i_size = fs->blocksize;
index df51db1..9466e78 100644 (file)
@@ -210,29 +210,29 @@ errcode_t ext2fs_zero_blocks(ext2_filsys fs, blk_t blk, int num,
 struct mkjournal_struct {
        int             num_blocks;
        int             newblocks;
-       blk_t           goal;
-       blk_t           blk_to_zero;
+       blk64_t         goal;
+       blk64_t         blk_to_zero;
        int             zero_count;
        char            *buf;
        errcode_t       err;
 };
 
 static int mkjournal_proc(ext2_filsys  fs,
-                          blk_t        *blocknr,
-                          e2_blkcnt_t  blockcnt,
-                          blk_t        ref_block EXT2FS_ATTR((unused)),
-                          int          ref_offset EXT2FS_ATTR((unused)),
-                          void         *priv_data)
+                         blk64_t       *blocknr,
+                         e2_blkcnt_t   blockcnt,
+                         blk64_t       ref_block EXT2FS_ATTR((unused)),
+                         int           ref_offset EXT2FS_ATTR((unused)),
+                         void          *priv_data)
 {
        struct mkjournal_struct *es = (struct mkjournal_struct *) priv_data;
-       blk_t   new_blk;
+       blk64_t new_blk;
        errcode_t       retval;
 
        if (*blocknr) {
                es->goal = *blocknr;
                return 0;
        }
-       retval = ext2fs_new_block(fs, es->goal, 0, &new_blk);
+       retval = ext2fs_new_block2(fs, es->goal, 0, &new_blk);
        if (retval) {
                es->err = retval;
                return BLOCK_ABORT;
@@ -250,10 +250,10 @@ static int mkjournal_proc(ext2_filsys     fs,
                            (es->zero_count < 1024))
                                es->zero_count++;
                        else {
-                               retval = ext2fs_zero_blocks(fs,
-                                                           es->blk_to_zero,
-                                                           es->zero_count,
-                                                           0, 0);
+                               retval = ext2fs_zero_blocks2(fs,
+                                                            es->blk_to_zero,
+                                                            es->zero_count,
+                                                            0, 0);
                                es->zero_count = 0;
                        }
                }
@@ -284,7 +284,7 @@ static int mkjournal_proc(ext2_filsys       fs,
  * This function creates a journal using direct I/O routines.
  */
 static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
-                                    blk_t size, int flags)
+                                    blk64_t size, int flags)
 {
        char                    *buf;
        dgrp_t                  group, start, end, i, log_flex;
@@ -344,14 +344,14 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
        es.goal = (fs->super->s_blocks_per_group * group) +
                fs->super->s_first_data_block;
 
-       retval = ext2fs_block_iterate2(fs, journal_ino, BLOCK_FLAG_APPEND,
+       retval = ext2fs_block_iterate3(fs, journal_ino, BLOCK_FLAG_APPEND,
                                       0, mkjournal_proc, &es);
        if (es.err) {
                retval = es.err;
                goto errout;
        }
        if (es.zero_count) {
-               retval = ext2fs_zero_blocks(fs, es.blk_to_zero,
+               retval = ext2fs_zero_blocks2(fs, es.blk_to_zero,
                                            es.zero_count, 0, 0);
                if (retval)
                        goto errout;
index 22d2d2d..bc0ae61 100644 (file)
@@ -47,6 +47,7 @@ static errcode_t follow_link(ext2_filsys fs, ext2_ino_t root, ext2_ino_t dir,
        if (link_count++ > 5) {
                return EXT2_ET_SYMLINK_LOOP;
        }
+       /* FIXME-64: Actually, this is FIXME EXTENTS */
        if (ext2fs_inode_data_blocks(fs,&ei)) {
                retval = ext2fs_get_mem(fs->blocksize, &buffer);
                if (retval)
index 8764352..50aa207 100644 (file)
@@ -93,7 +93,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
        unsigned long   i, first_meta_bg;
        __u32           features;
        int             groups_per_block, blocks_per_group, io_flags;
-       blk_t           group_block, blk;
+       blk64_t         group_block, blk;
        char            *dest, *cp;
 #ifdef WORDS_BIGENDIAN
        struct ext2_group_desc *gdp;
@@ -327,7 +327,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                dest += fs->blocksize*first_meta_bg;
        }
        for (i=first_meta_bg ; i < fs->desc_blocks; i++) {
-               blk = ext2fs_descriptor_block_loc(fs, group_block, i);
+               blk = ext2fs_descriptor_block_loc2(fs, group_block, i);
                retval = io_channel_read_blk64(fs->io, blk, 1, dest);
                if (retval)
                        goto cleanup;
index 3316784..e5d6322 100644 (file)
@@ -49,7 +49,7 @@ static int mark_bad_block(ext2_filsys fs, blk_t *block_nr,
                return 0;
 
        if ((*block_nr < fs->super->s_first_data_block) ||
-           (*block_nr >= fs->super->s_blocks_count))
+           (*block_nr >= ext2fs_blocks_count(fs->super)))
                return 0;       /* Ignore illegal blocks */
 
        rb->err = ext2fs_badblocks_list_add(rb->bb_list, *block_nr);
index 0ca7604..25454a8 100644 (file)
@@ -59,7 +59,7 @@ errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f,
                        continue;
                if (fs &&
                    ((blockno < fs->super->s_first_data_block) ||
-                   (blockno >= fs->super->s_blocks_count))) {
+                    (blockno >= ext2fs_blocks_count(fs->super)))) {
                        if (invalid)
                                (invalid)(fs, blockno, buf, priv_data);
                        continue;
index 424d867..bf10995 100644 (file)
@@ -65,6 +65,7 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
        struct ext2_inode       inode;
        __u32                   *dindir_buf, *gdt_buf;
        unsigned long long      apb, inode_size;
+       /* FIXME-64 - can't deal with extents */
        blk_t                   dindir_blk, rsv_off, gdt_off, gdt_blk;
        int                     dindir_dirty = 0, inode_dirty = 0;