summaryrefslogtreecommitdiff
path: root/lib/ext2fs
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2011-09-15 15:44:56 -0400
committerTheodore Ts'o <tytso@mit.edu>2011-09-15 15:44:56 -0400
commit3fbfad558e01ffbacc14e5a536c4dfec0a0af4f5 (patch)
treef4bb93e261235a48c9ff4710b3f6d28030cf02f7 /lib/ext2fs
parentb71508075780cfb31258c006a2c6bf08b061d421 (diff)
downloade2fsprogs-3fbfad558e01ffbacc14e5a536c4dfec0a0af4f5.tar.gz
libext2fs: fix binary and source compatibility with the dump program
The dump program relies on fs->frag_size and the EXT2_FRAGS_PER_BLOCK() macro. Kind of silly for it to do so, but it's part of the kludgy way the dump program (which was originally written for the BSD FFS was ported over to support ext2/3.) Given how it makes assumptions about the ext2/3/4 file system being similar to the BSD FFS, it's a bit of a miracle it works for ext4 --- or at least appears to work... Addresses-Debian-Bug: #636418 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'lib/ext2fs')
-rw-r--r--lib/ext2fs/ext2_fs.h12
-rw-r--r--lib/ext2fs/ext2fs.h5
-rw-r--r--lib/ext2fs/initialize.c2
-rw-r--r--lib/ext2fs/openfs.c2
4 files changed, 17 insertions, 4 deletions
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
index 2d960910..a3e1c5be 100644
--- a/lib/ext2fs/ext2_fs.h
+++ b/lib/ext2fs/ext2_fs.h
@@ -109,6 +109,18 @@
#define EXT2_CLUSTER_SIZE_BITS(s) ((s)->s_log_cluster_size + 10)
/*
+ * Macro-instructions used to manage fragments
+ *
+ * Note: for backwards compatibility only, for the dump program.
+ * Ext2/3/4 will never support fragments....
+ */
+#define EXT2_MIN_FRAG_SIZE EXT2_MIN_BLOCK_SIZE
+#define EXT2_MAX_FRAG_SIZE EXT2_MAX_BLOCK_SIZE
+#define EXT2_MIN_FRAG_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE
+#define EXT2_FRAG_SIZE(s) EXT2_BLOCK_SIZE(s)
+#define EXT2_FRAGS_PER_BLOCK(s) 1
+
+/*
* ACL structures
*/
struct ext2_acl_header /* Header of Access Control Lists */
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 5379422b..9e92e946 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -195,7 +195,7 @@ struct struct_ext2_filsys {
char * device_name;
struct ext2_super_block * super;
unsigned int blocksize;
- int cluster_ratio_bits;
+ int fragsize;
dgrp_t group_desc_count;
unsigned long desc_blocks;
struct ext2_group_desc * group_desc;
@@ -216,10 +216,11 @@ struct struct_ext2_filsys {
struct ext2_image_hdr * image_header;
__u32 umask;
time_t now;
+ int cluster_ratio_bits;
/*
* Reserved for future expansion
*/
- __u32 reserved[7];
+ __u32 reserved[6];
/*
* Reserved for the use of the calling application.
diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
index b9d45aef..79f893a5 100644
--- a/lib/ext2fs/initialize.c
+++ b/lib/ext2fs/initialize.c
@@ -177,7 +177,7 @@ errcode_t ext2fs_initialize(const char *name, int flags,
super->s_creator_os = CREATOR_OS;
- fs->blocksize = EXT2_BLOCK_SIZE(super);
+ fs->fragsize = fs->blocksize = EXT2_BLOCK_SIZE(super);
fs->cluster_ratio_bits = super->s_log_cluster_size -
super->s_log_block_size;
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
index a598ca04..0f1df207 100644
--- a/lib/ext2fs/openfs.c
+++ b/lib/ext2fs/openfs.c
@@ -245,7 +245,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
retval = EXT2_ET_CORRUPT_SUPERBLOCK;
goto cleanup;
}
- fs->blocksize = EXT2_BLOCK_SIZE(fs->super);
+ fs->fragsize = fs->blocksize = EXT2_BLOCK_SIZE(fs->super);
if (EXT2_INODE_SIZE(fs->super) < EXT2_GOOD_OLD_INODE_SIZE) {
retval = EXT2_ET_CORRUPT_SUPERBLOCK;
goto cleanup;