Re: [PATCH] seq_file: Optimize seq_puts()

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

 



Le 16/04/2024 à 22:56, David Laight a écrit :
From: Al Viro
Sent: 15 April 2024 22:01
...
No need to make it a macro, actually.  And I would suggest going
a bit further:

static inline void seq_puts(struct seq_file *m, const char *s)

That probably needs to be 'always_inline'.

{
	if (!__builtin_constant_p(*s))
		__seq_puts(m, s);
	else if (s[0] && !s[1])
		seq_putc(m, s[0]);
	else
		seq_write(m, s, __builtin_strlen(s));
}

You missed seq_puts(m, "");

I did wonder about checking sizeof(s) <= 2 in the #define version.

git grep seq_puts.*\"[^\\].\" | wc -l
77

What would you do in this case?
2 seq_putc() in order to save a memcpy(..., 2), that's it?

It would also slightly change the behaviour, as only the 1st char could be added. Actually, it is all or nothing.

Don't know what is the best.

Any thought?

CJ


That would pick up the cases where a separator is changed/added
in a loop.

Could you do:
	size_t len = __builtin_strlen(s);
	if (!__builtin_constant_p(len))
		__seq_puts(m, s);
	else switch (len){
	case 0: break;
	case 1: seq_putc(m, s[0]);
	default: seq_write(m, s, len);
	}

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)








[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux