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: <a6911ca13419af48d7170e4426cd23f22a2824f5.camel@perches.com>
Date:   Tue, 31 Dec 2019 10:01:36 -0800
From:   Joe Perches <joe@...ches.com>
To:     Markus Elfring <Markus.Elfring@....de>,
        Namjae Jeon <namjae.jeon@...sung.com>,
        linux-fsdevel@...r.kernel.org
Cc:     linux-kernel@...r.kernel.org, Christoph Hellwig <hch@....de>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Sungjong Seo <sj1557.seo@...sung.com>,
        Valdis Klētnieks <valdis.kletnieks@...edu>,
        linkinjeon@...il.com
Subject: Re: [PATCH v8 10/13] exfat: add nls operations

On Tue, 2019-12-31 at 15:23 +0100, Markus Elfring wrote:
> …
> > +++ b/fs/exfat/nls.c
> …
> > +int exfat_nls_cmp_uniname(struct super_block *sb, unsigned short *a,
> > +		unsigned short *b)
> > +{
> > +	int i;
> > +
> > +	for (i = 0; i < MAX_NAME_LENGTH; i++, a++, b++) {
> > +		if (exfat_nls_upper(sb, *a) != exfat_nls_upper(sb, *b))
> 
> Can it matter to compare run time characteristics with the following
> code variant?
> 
> +	for (i = 0; i < MAX_NAME_LENGTH; i++) {
> +		if (exfat_nls_upper(sb, a[i]) != exfat_nls_upper(sb, b[i]))

Markus, try comparing the object code produced by the compiler first,
it's likely identical.

If this is actually a performance sensitive path, it might improve
runtime by having 2 code paths to avoid the testing of
sbi->options.case_sensitive for each u16 value in the array.

Something like: (uncompiled, untested, written in email client)

static inline
unsigned short exfat_sbi_upper(struct exfat_sb_info *sbi, unsigned short a)
{
	if (sbi->vol_utbl[a])
		return sbi->vol_utbl[a];
	return a;
}

int exfat_nls_cmp_uniname(struct super_block *sb,
			  unsigned short *a,
			  unsigned short *b)
{
	int i;
	struct exfat_sb_info *sbi = EXFAT_SB(sb);

	if (!sbi->options.case_sensitive) {
		for (i = 0; i < MAX_NAME_LENGTH; i++, a++, b++) {
			if (exfat_sbi_upper(sbi, *a) != exfat_sbi_upper(sbi, *b))
				return 1;
			if (*a == 0x0)
				return 0;
		}
	} else {
		for (i = 0; i < MAX_NAME_LENGTH; i++, a++, b++) {
			if (*a != *b)
				return 1;	
			if (*a == 0x0)
				return 0;
		}
	}

	return 0;
}


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ