lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LFD.2.00.1102161137100.4744@dhcp-27-109.brq.redhat.com>
Date:	Wed, 16 Feb 2011 11:38:02 +0100 (CET)
From:	Lukas Czerner <lczerner@...hat.com>
To:	Lukas Czerner <lczerner@...hat.com>
cc:	linux-ext4@...r.kernel.org, tytso@....edu
Subject: Re: [PATCH V2] mke2fs: Inform user of ongoing discard

On Mon, 24 Jan 2011, Lukas Czerner wrote:

> (V2: remove MB macro)
> 
> For some time now we are doing initial discard of the device prior to
> filesystem creation. However, there is no feedback for the user and
> hence on some devices with slow TRIM implementation it may appear that
> mke2fs is stuck.
> 
> This commit introduce new function mke2fs_discard_device(), which is a
> wrapper for io_channel_discard(). The discard is done per-partes and
> discard progress is being reported back to the user. The discard step
> has been set to 2GB size, which works reasonably well on both slow and
> fast devices.
> 
> I gave up on doing fancy things like align discard according to
> discard_alignment, checking for discard granularity and computing
> estimate time. First of all, because it would require either new ioctl
> to retrieve those information or use of libudev library, none of it
> seems to be worth it. Regarding discard_granularity, I doubt there is
> any sane device with discard granularity that big it would affect this.

Hi Ted,

if there are no objections, could you pick it up ?

Thanks!
-Lukas
> 
> Signed-off-by: Lukas Czerner <lczerner@...hat.com>
> ---
>  misc/mke2fs.c |   54 +++++++++++++++++++++++++++++++++++++++++-------------
>  1 files changed, 41 insertions(+), 13 deletions(-)
> 
> diff --git a/misc/mke2fs.c b/misc/mke2fs.c
> index bc1211d..8f358c6 100644
> --- a/misc/mke2fs.c
> +++ b/misc/mke2fs.c
> @@ -72,6 +72,8 @@ extern int optind;
>  #define ZAP_BOOTBLOCK
>  #endif
>  
> +#define DISCARD_STEP_MB		(2048)
> +
>  extern int isatty(int);
>  extern FILE *fpopen(const char *cmd, const char *mode);
>  
> @@ -1922,6 +1924,44 @@ static int mke2fs_setup_tdb(const char *name, io_manager *io_ptr)
>  	return retval;
>  }
>  
> +static int mke2fs_discard_device(ext2_filsys fs)
> +{
> +	struct ext2fs_numeric_progress_struct progress;
> +	blk64_t blocks = ext2fs_blocks_count(fs->super);
> +	blk64_t count = DISCARD_STEP_MB;
> +	blk64_t cur = 0;
> +	int retval = 0;
> +
> +	count *= (1024 * 1024);
> +	count /= fs->blocksize;
> +
> +	ext2fs_numeric_progress_init(fs, &progress,
> +				     _("Discarding device blocks: "),
> +				     blocks);
> +	while (cur < blocks) {
> +		ext2fs_numeric_progress_update(fs, &progress, cur);
> +
> +		if (cur + count > blocks)
> +			count = blocks - cur;
> +
> +		retval = io_channel_discard(fs->io, cur, count, fs->blocksize);
> +		if (retval)
> +			break;
> +		cur += count;
> +	}
> +
> +	if (retval) {
> +		ext2fs_numeric_progress_close(fs, &progress,
> +				      _("failed - "));
> +		if (!quiet)
> +			printf("%s\n",error_message(retval));
> +	} else
> +		ext2fs_numeric_progress_close(fs, &progress,
> +				      _("done                            \n"));
> +
> +	return retval;
> +}
> +
>  int main (int argc, char *argv[])
>  {
>  	errcode_t	retval = 0;
> @@ -1982,19 +2022,7 @@ int main (int argc, char *argv[])
>  
>  	/* Can't undo discard ... */
>  	if (discard && (io_ptr != undo_io_manager)) {
> -		blk64_t blocks = ext2fs_blocks_count(fs->super);
> -		if (verbose)
> -			printf(_("Calling BLKDISCARD from 0 to %llu... "),
> -			       (unsigned long long) blocks);
> -		retval = io_channel_discard(fs->io, 0, blocks, fs->blocksize);
> -		if (verbose) {
> -			if (retval)
> -				printf(_("failed (%s)\n"),
> -				       error_message(retval));
> -			else
> -				printf(_("succeeded\n"));
> -		}
> -
> +		retval = mke2fs_discard_device(fs);
>  		if (!retval && io_channel_discard_zeroes_data(fs->io)) {
>  			if (verbose)
>  				printf(_("Discard succeeded and will return 0s "
> 

-- 
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ