aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ext2fs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ext2fs')
-rw-r--r--lib/ext2fs/ChangeLog10
-rw-r--r--lib/ext2fs/alloc_tables.c6
-rw-r--r--lib/ext2fs/bb_inode.c8
-rw-r--r--lib/ext2fs/block.c8
-rw-r--r--lib/ext2fs/bmove.c2
-rw-r--r--lib/ext2fs/dir_iterate.c2
-rw-r--r--lib/ext2fs/expanddir.c2
-rw-r--r--lib/ext2fs/ext2fs.h4
-rw-r--r--lib/ext2fs/ext2fsP.h2
-rw-r--r--lib/ext2fs/read_bb.c2
10 files changed, 31 insertions, 15 deletions
diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog
index 74ed6906..b8675fa3 100644
--- a/lib/ext2fs/ChangeLog
+++ b/lib/ext2fs/ChangeLog
@@ -1,3 +1,13 @@
+1998-06-10 Theodore Ts'o <tytso@rsts-11.mit.edu>
+
+ * alloc_tables.c (ext2fs_allocate_group_table): Fix bug so that if
+ the stride length hits a bad value, we retry the block
+ allocation starting at the beginning of the block group.
+
+ * ext2fs.h, bb_inode.c, block.c, bmove.c, dir_iterate.c,
+ expanddir.c, ext2fsP.h, read_bb.c: Change blkcnt_t to be
+ e2_blkcnt_t to avoid collision with LFS API.
+
1998-05-01 Theodore Ts'o <tytso@rsts-11.mit.edu>
* initialize.c (ext2fs_initialize): Initialize s_inodes_count in a
diff --git a/lib/ext2fs/alloc_tables.c b/lib/ext2fs/alloc_tables.c
index 3a057596..3660c5e0 100644
--- a/lib/ext2fs/alloc_tables.c
+++ b/lib/ext2fs/alloc_tables.c
@@ -85,6 +85,9 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, int group,
if (!fs->group_desc[group].bg_block_bitmap) {
retval = ext2fs_get_free_blocks(fs, start_blk, last_blk,
1, bmap, &new_blk);
+ if (retval == EXT2_ET_BLOCK_ALLOC_FAIL)
+ retval = ext2fs_get_free_blocks(fs, group_blk,
+ last_blk, 1, bmap, &new_blk);
if (retval)
return retval;
ext2fs_mark_block_bitmap(bmap, new_blk);
@@ -94,6 +97,9 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, int group,
if (!fs->group_desc[group].bg_inode_bitmap) {
retval = ext2fs_get_free_blocks(fs, start_blk, last_blk,
1, bmap, &new_blk);
+ if (retval == EXT2_ET_BLOCK_ALLOC_FAIL)
+ retval = ext2fs_get_free_blocks(fs, group_blk,
+ last_blk, 1, bmap, &new_blk);
if (retval)
return retval;
ext2fs_mark_block_bitmap(bmap, new_blk);
diff --git a/lib/ext2fs/bb_inode.c b/lib/ext2fs/bb_inode.c
index 38d10526..e6ce7766 100644
--- a/lib/ext2fs/bb_inode.c
+++ b/lib/ext2fs/bb_inode.c
@@ -47,11 +47,11 @@ struct set_badblock_record {
};
static int set_bad_block_proc(ext2_filsys fs, blk_t *block_nr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_block, int ref_offset,
void *priv_data);
static int clear_bad_block_proc(ext2_filsys fs, blk_t *block_nr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_block, int ref_offset,
void *priv_data);
@@ -166,7 +166,7 @@ cleanup:
#pragma argsused
#endif
static int clear_bad_block_proc(ext2_filsys fs, blk_t *block_nr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_block, int ref_offset,
void *priv_data)
{
@@ -228,7 +228,7 @@ static int clear_bad_block_proc(ext2_filsys fs, blk_t *block_nr,
#pragma argsused
#endif
static int set_bad_block_proc(ext2_filsys fs, blk_t *block_nr,
- blkcnt_t blockcnt, blk_t ref_block,
+ e2_blkcnt_t blockcnt, blk_t ref_block,
int ref_offset, void *priv_data)
{
struct set_badblock_record *rec = (struct set_badblock_record *)
diff --git a/lib/ext2fs/block.c b/lib/ext2fs/block.c
index 16a97c83..72cbb4a8 100644
--- a/lib/ext2fs/block.c
+++ b/lib/ext2fs/block.c
@@ -27,11 +27,11 @@ struct block_context {
ext2_filsys fs;
int (*func)(ext2_filsys fs,
blk_t *blocknr,
- blkcnt_t bcount,
+ e2_blkcnt_t bcount,
blk_t ref_blk,
int ref_offset,
void *priv_data);
- blkcnt_t bcount;
+ e2_blkcnt_t bcount;
int bsize;
int flags;
errcode_t errcode;
@@ -307,7 +307,7 @@ errcode_t ext2fs_block_iterate2(ext2_filsys fs,
char *block_buf,
int (*func)(ext2_filsys fs,
blk_t *blocknr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_blk,
int ref_offset,
void *priv_data),
@@ -445,7 +445,7 @@ struct xlate {
#ifdef __TURBOC__
#pragma argsused
#endif
-static int xlate_func(ext2_filsys fs, blk_t *blocknr, blkcnt_t blockcnt,
+static int xlate_func(ext2_filsys fs, blk_t *blocknr, e2_blkcnt_t blockcnt,
blk_t ref_block, int ref_offset, void *priv_data)
{
struct xlate *xl = (struct xlate *) priv_data;
diff --git a/lib/ext2fs/bmove.c b/lib/ext2fs/bmove.c
index 2745307c..fbb5f9b6 100644
--- a/lib/ext2fs/bmove.c
+++ b/lib/ext2fs/bmove.c
@@ -38,7 +38,7 @@ struct process_block_struct {
};
static int process_block(ext2_filsys fs, blk_t *block_nr,
- blkcnt_t blockcnt, blk_t ref_block,
+ e2_blkcnt_t blockcnt, blk_t ref_block,
int ref_offset, void *priv_data)
{
struct process_block_struct *pb;
diff --git a/lib/ext2fs/dir_iterate.c b/lib/ext2fs/dir_iterate.c
index 869c13b3..9aff315d 100644
--- a/lib/ext2fs/dir_iterate.c
+++ b/lib/ext2fs/dir_iterate.c
@@ -74,7 +74,7 @@ errcode_t ext2fs_dir_iterate(ext2_filsys fs,
*/
extern int ext2fs_process_dir_block(ext2_filsys fs,
blk_t *blocknr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_block,
int ref_offset,
void *priv_data)
diff --git a/lib/ext2fs/expanddir.c b/lib/ext2fs/expanddir.c
index e2d8c352..bdfc257e 100644
--- a/lib/ext2fs/expanddir.c
+++ b/lib/ext2fs/expanddir.c
@@ -30,7 +30,7 @@ struct expand_dir_struct {
static int expand_dir_proc(ext2_filsys fs,
blk_t *blocknr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_block,
int ref_offset,
void *priv_data)
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 83ca4df3..9a28af59 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -54,7 +54,7 @@ typedef unsigned long long __u64;
typedef __u32 blk_t;
typedef unsigned int dgrp_t;
typedef __u32 ext2_off_t;
-typedef __s64 blkcnt_t;
+typedef __s64 e2_blkcnt_t;
#if EXT2_FLAT_INCLUDES
#include "com_err.h"
@@ -554,7 +554,7 @@ errcode_t ext2fs_block_iterate2(ext2_filsys fs,
char *block_buf,
int (*func)(ext2_filsys fs,
blk_t *blocknr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_blk,
int ref_offset,
void *priv_data),
diff --git a/lib/ext2fs/ext2fsP.h b/lib/ext2fs/ext2fsP.h
index 129cf909..b2b593db 100644
--- a/lib/ext2fs/ext2fsP.h
+++ b/lib/ext2fs/ext2fsP.h
@@ -85,7 +85,7 @@ struct ext2_inode_cache_ent {
extern int ext2fs_process_dir_block(ext2_filsys fs,
blk_t *blocknr,
- blkcnt_t blockcnt,
+ e2_blkcnt_t blockcnt,
blk_t ref_block,
int ref_offset,
void *priv_data);
diff --git a/lib/ext2fs/read_bb.c b/lib/ext2fs/read_bb.c
index c43f97c2..c005d42e 100644
--- a/lib/ext2fs/read_bb.c
+++ b/lib/ext2fs/read_bb.c
@@ -43,7 +43,7 @@ struct read_bb_record {
#pragma argsused
#endif
static int mark_bad_block(ext2_filsys fs, blk_t *block_nr,
- blkcnt_t blockcnt, blk_t ref_block,
+ e2_blkcnt_t blockcnt, blk_t ref_block,
int ref_offset, void *priv_data)
{
struct read_bb_record *rb = (struct read_bb_record *) priv_data;