Re: [PATCH v2 1/4] ext2fs: opening filesystem code refactoring

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux