[<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