From: Artem Blagodarenko <artem.blagodarenko@gmail.com>
To: linux-ext4@vger.kernel.org
Cc: adilger.kernel@dilger.ca
Subject: [PATCH v7 1/4] ext2fs: opening filesystem code refactoring
Date: Tue, 29 Jan 2019 20:51:31 +0300 [thread overview]
Message-ID: <20190129175134.26652-2-c17828@cray.com> (raw)
In-Reply-To: <20190129175134.26652-1-c17828@cray.com>
There are similar opening filesystem code in different utilities.
The patch moves improved handling from try_open_fs()
into ext2fs_open(). This function make one of the action
based on parameters:
1) open filesystem with given superblock, superblock size
2) open filesystem with given superblock, but try to
find right block size
Signed-off-by: Artem Blagodarenko <c17828@cray.com>
---
e2fsck/unix.c | 28 +++-------------------------
lib/ext2fs/openfs.c | 39 +++++++++++++++++++++++++++++++++++----
misc/dumpe2fs.c | 17 ++---------------
3 files changed, 40 insertions(+), 44 deletions(-)
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index 5b3552ec..ddcf52a4 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1151,31 +1151,9 @@ static errcode_t try_open_fs(e2fsck_t ctx, int flags, io_manager io_ptr,
ext2_filsys *ret_fs)
{
errcode_t retval;
-
- *ret_fs = NULL;
- if (ctx->superblock && ctx->blocksize) {
- retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options,
- flags, ctx->superblock, ctx->blocksize,
- io_ptr, ret_fs);
- } else if (ctx->superblock) {
- int blocksize;
- for (blocksize = EXT2_MIN_BLOCK_SIZE;
- blocksize <= EXT2_MAX_BLOCK_SIZE; blocksize *= 2) {
- if (*ret_fs) {
- ext2fs_free(*ret_fs);
- *ret_fs = NULL;
- }
- retval = ext2fs_open2(ctx->filesystem_name,
- ctx->io_options, flags,
- ctx->superblock, blocksize,
- io_ptr, ret_fs);
- if (!retval)
- break;
- }
- } else
- retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options,
- flags, 0, 0, io_ptr, ret_fs);
-
+ retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options,
+ flags, ctx->superblock, ctx->blocksize,
+ io_ptr, ret_fs);
if (retval == 0) {
(*ret_fs)->priv_data = ctx;
e2fsck_set_bitmap_type(*ret_fs, EXT2FS_BMAP64_RBTREE,
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
index 85d73e2a..16d36200 100644
--- a/lib/ext2fs/openfs.c
+++ b/lib/ext2fs/openfs.c
@@ -114,10 +114,10 @@ static void block_sha_map_free_entry(void *data)
* EXT2_FLAG_64BITS - Allow 64-bit bitfields (needed for large
* filesystems)
*/
-errcode_t ext2fs_open2(const char *name, const char *io_options,
- int flags, int superblock,
- unsigned int block_size, io_manager manager,
- ext2_filsys *ret_fs)
+static errcode_t __ext2fs_open2(const char *name, const char *io_options,
+ int flags, int superblock,
+ unsigned int block_size, io_manager manager,
+ ext2_filsys *ret_fs)
{
ext2_filsys fs;
errcode_t retval;
@@ -515,6 +515,37 @@ cleanup:
return retval;
}
+errcode_t ext2fs_open2(const char *name, const char *io_options,
+ int flags, int superblock,
+ unsigned int block_size, io_manager manager,
+ ext2_filsys *ret_fs)
+{
+ errcode_t retval;
+
+ *ret_fs = NULL;
+ if (superblock && block_size) {
+ retval = __ext2fs_open2(name, io_options,
+ flags, superblock, block_size,
+ manager, ret_fs);
+ } else {
+ int size;
+
+ for (size = EXT2_MIN_BLOCK_SIZE;
+ size <= EXT2_MAX_BLOCK_SIZE; size *= 2) {
+ if (*ret_fs) {
+ ext2fs_free(*ret_fs);
+ *ret_fs = NULL;
+ }
+ retval = __ext2fs_open2(name, io_options, flags,
+ superblock, size,
+ manager, ret_fs);
+ if (!retval)
+ break;
+ }
+ }
+ return retval;
+}
+
/*
* Set/get the filesystem data I/O channel.
*
diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
index 384ce925..183e2f6f 100644
--- a/misc/dumpe2fs.c
+++ b/misc/dumpe2fs.c
@@ -667,21 +667,8 @@ int main (int argc, char ** argv)
if (image_dump)
flags |= EXT2_FLAG_IMAGE_FILE;
try_open_again:
- if (use_superblock && !use_blocksize) {
- for (use_blocksize = EXT2_MIN_BLOCK_SIZE;
- use_blocksize <= EXT2_MAX_BLOCK_SIZE;
- use_blocksize *= 2) {
- retval = ext2fs_open (device_name, flags,
- use_superblock,
- use_blocksize, unix_io_manager,
- &fs);
- if (!retval)
- break;
- }
- } else {
- retval = ext2fs_open(device_name, flags, use_superblock,
- use_blocksize, unix_io_manager, &fs);
- }
+ retval = ext2fs_open2(device_name, 0, flags, use_superblock,
+ use_blocksize, unix_io_manager, &fs);
flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
if (retval && !retval_csum) {
retval_csum = retval;
--
2.14.3
next prev parent reply other threads:[~2019-01-29 17:52 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-29 17:51 [PATCH v7 0/4] e2image -b option to pass superblock number Artem Blagodarenko
2019-01-29 17:51 ` Artem Blagodarenko [this message]
2019-01-30 3:01 ` [PATCH v7 1/4] ext2fs: opening filesystem code refactoring Andreas Dilger
2019-03-06 16:48 ` Theodore Y. Ts'o
2019-03-06 17:06 ` Theodore Y. Ts'o
2019-01-29 17:51 ` [PATCH v7 2/4] e2image: add -b and -B options to use supperblock backup Artem Blagodarenko
2019-01-30 3:06 ` Andreas Dilger
2019-03-06 17:06 ` Theodore Y. Ts'o
2019-01-29 17:51 ` [PATCH v7 3/4] tests: add test for e2image -b option Artem Blagodarenko
2019-01-29 17:51 ` [PATCH v7 4/4] ext2fs: automaticlly open backup superblocks Artem Blagodarenko
2019-01-30 3:10 ` Andreas Dilger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190129175134.26652-2-c17828@cray.com \
--to=artem.blagodarenko@gmail.com \
--cc=adilger.kernel@dilger.ca \
--cc=linux-ext4@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.