2012-04-01 12:03:40

by Yongqiang Yang

[permalink] [raw]
Subject: [PATCH] resize2fs: let online resizing report new blocks count right

After online resizing finishes, resize2fs loads the latest super block
so that the new blocks count is reported correctly.

Signed-off-by: Yongqiang Yang <[email protected]>
---
resize/online.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/resize/online.c b/resize/online.c
index 966ea1e..cb48556 100644
--- a/resize/online.c
+++ b/resize/online.c
@@ -97,8 +97,7 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
exit(1);
}
} else {
- close(fd);
- return 0;
+ goto succeeded;
}

if ((ext2fs_blocks_count(sb) > MAX_32_NUM) ||
@@ -220,6 +219,19 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
}

ext2fs_free(new_fs);
+succeeded:
+ /*
+ * load the lastest super block.
+ */
+ io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET);
+ retval = io_channel_read_blk(fs->io, 1, -SUPERBLOCK_SIZE,
+ fs->super);
+ if (retval == 0)
+ *new_size = ext2fs_blocks_count(fs->super);
+ else
+ printf(_("Resize succeeded, however an error happened "
+ "when loading super block.\n\n"));
+
close(fd);

return 0;
--
1.7.5.1



2012-04-01 15:26:09

by Andreas Dilger

[permalink] [raw]
Subject: Re: [PATCH] resize2fs: let online resizing report new blocks count right


On 2012-01-31, at 20:04, Yongqiang Yang <[email protected]> wrote:

> After online resizing finishes, resize2fs loads the latest super block
> so that the new blocks count is reported correctly.
>
> Signed-off-by: Yongqiang Yang <[email protected]>
> ---
> resize/online.c | 16 ++++++++++++++--
> 1 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/resize/online.c b/resize/online.c
> index 966ea1e..cb48556 100644
> --- a/resize/online.c
> +++ b/resize/online.c
> @@ -97,8 +97,7 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
> exit(1);
> }
> } else {
> - close(fd);
> - return 0;
> + goto succeeded;
> }
>
> if ((ext2fs_blocks_count(sb) > MAX_32_NUM) ||
> @@ -220,6 +219,19 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
> }
>
> ext2fs_free(new_fs);
> +succeeded:
> + /*
> + * load the lastest super block.
> + */
> + io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET);
> + retval = io_channel_read_blk(fs->io, 1, -SUPERBLOCK_SIZE,
> + fs->super);

Instead of using io_channel_read_blk() directly it is also possible to use ext2fs_read_block() with a negative size to force it to bypass the ext2fs cache.

Cheers, Andreas

> + if (retval == 0)
> + *new_size = ext2fs_blocks_count(fs->super);
> + else
> + printf(_("Resize succeeded, however an error happened "
> + "when loading super block.\n\n"));
> +
> close(fd);
>
> return 0;
> --
> 1.7.5.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html