On Nov 16, 2017, at 6:55 AM, Artem Blagodarenko <artem.blagodarenko@xxxxxxxxx> wrote: > > From: Artem Blagodarenko <artem.blagodarenko@xxxxxxxxxxx> > > There are similar opening filesystem code in different utilities. > > The patch moves this code to ext2fs_try_open_fs(). > 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 > 3) open filesystem with default superblock and block size > > Signed-off-by: Artem Blagodarenko <artem.blagodarenko@xxxxxxxxx> > --- > e2fsck/unix.c | 28 +++------------------------- > lib/ext2fs/ext2fs.h | 4 ++++ > lib/ext2fs/openfs.c | 36 +++++++++++++++++++++++++++++++++++- > misc/dumpe2fs.c | 17 +++-------------- > 4 files changed, 45 insertions(+), 40 deletions(-) > > diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h > index 6774e32c..c394ec80 100644 > --- a/lib/ext2fs/ext2fs.h > +++ b/lib/ext2fs/ext2fs.h > @@ -1588,6 +1588,10 @@ extern 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); > +extern errcode_t ext2fs_try_open_fs(char *filesystem_name, char *io_options, > + blk64_t superblock, int blocksize, int flags, > + io_manager io_ptr, ext2_filsys *ret_fs); This ext2fs_try_open_fs() function is declared here, but isn't added in this patch. It is removed in the next patch, but should really have been removed here instead. > diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c > index f74cd245..585ad766 100644 > --- a/lib/ext2fs/openfs.c > +++ b/lib/ext2fs/openfs.c > @@ -497,6 +497,40 @@ 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 if (superblock) { > + int block_size; > + > + for (block_size = EXT2_MIN_BLOCK_SIZE; > + block_size <= EXT2_MAX_BLOCK_SIZE; block_size *= 2) { > + if (*ret_fs) { > + ext2fs_free(*ret_fs); > + *ret_fs = NULL; > + } > + retval = __ext2fs_open2(name, > + io_options, flags, > + superblock, block_size, > + manager, ret_fs); > + if (!retval) > + break; > + } > + } else > + retval = __ext2fs_open2(name, io_options, > + flags, 0, 0, manager, ret_fs); I still think it would be useful to automatically try to open the backup superblocks, if no superblock number is specified. That could be done in a separate patch. In general, it looks like a good cleanup of the code. Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP