+2002-11-07 <tytso@snap.thunk.org>
+
+ * closefs.c (write_bgdesc, ext2fs_flush): Fix bug in meta_bg
+ support when the MASTER_SB_ONLY flag is set. Some of
+ the descriptor blocks that should have been written out
+ were getting skipped.
+
2002-10-31 Theodore Ts'o <tytso@mit.edu>
* Release of E2fsprogs 1.30
{
errcode_t retval;
char *group_ptr = (char *) group_shadow;
- int j, old_desc_blocks;
+ int j, old_desc_blocks, mod;
int has_super = ext2fs_bg_has_super(fs, group);
dgrp_t meta_bg_size, meta_bg;
old_desc_blocks = fs->desc_blocks;
if (!(fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) ||
(meta_bg < fs->super->s_first_meta_bg)) {
- if (!has_super)
+ if (!has_super ||
+ ((fs->flags & EXT2_FLAG_MASTER_SB_ONLY) && (group != 0)))
return 0;
for (j=0; j < old_desc_blocks; j++) {
retval = io_channel_write_blk(fs->io,
} else {
if (has_super)
group_block++;
- if (((group % meta_bg_size) == 0) ||
- ((group % meta_bg_size) == 1) ||
- ((group % meta_bg_size) == (meta_bg_size-1))) {
+ mod = group % meta_bg_size;
+ if ((mod == 0) || (mod == 1) || (mod == (meta_bg_size-1))) {
+ if (mod && (fs->flags & EXT2_FLAG_MASTER_SB_ONLY))
+ return 0;
return io_channel_write_blk(fs->io, group_block,
1, group_ptr + (meta_bg*fs->blocksize));
}
errcode_t ext2fs_flush(ext2_filsys fs)
{
- dgrp_t i,j,maxgroup;
+ dgrp_t i,j;
blk_t group_block;
errcode_t retval;
unsigned long fs_state;
* superblocks and group descriptors.
*/
group_block = fs->super->s_first_data_block;
- maxgroup = (fs->flags & EXT2_FLAG_MASTER_SB_ONLY) ? 1 :
- fs->group_desc_count;
- for (i = 0; i < maxgroup; i++) {
- if (i && ext2fs_bg_has_super(fs, i)) {
+ for (i = 0; i < fs->group_desc_count; i++) {
+ if (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) &&
+ i && ext2fs_bg_has_super(fs, i)) {
retval = write_backup_super(fs, i, group_block,
super_shadow);
if (retval)