Using strlen() generates an unnecessary inline function expansion plus
dynamic stack adjustment. For constant strings, strlen() == sizeof()-1
and the object code is better. Patch against 2.4.19.
diff -urp 2.4.x-xfs-linux/fs/nfs/dir.c 2.4.x-xfs-linux-kdb/fs/nfs/dir.c
--- 2.4.x-xfs-linux/fs/nfs/dir.c Fri Aug 9 16:03:57 2002
+++ 2.4.x-xfs-linux-kdb/fs/nfs/dir.c Wed Aug 28 16:54:44 2002
@@ -741,7 +741,7 @@ static int nfs_sillyrename(struct inode
static unsigned int sillycounter;
const int i_inosize = sizeof(dir->i_ino)*2;
const int countersize = sizeof(sillycounter)*2;
- const int slen = strlen(".nfs") + i_inosize + countersize;
+ const int slen = sizeof(".nfs")-1 + i_inosize + countersize;
char silly[slen+1];
struct qstr qsilly;
struct dentry *sdentry;
On Wednesday 28 August 2002 09:07, Keith Owens wrote:
> Using strlen() generates an unnecessary inline function expansion plus
> dynamic stack adjustment. For constant strings, strlen() == sizeof()-1
> and the object code is better. Patch against 2.4.19.
But now the source code is worse. Macro?
> diff -urp 2.4.x-xfs-linux/fs/nfs/dir.c 2.4.x-xfs-linux-kdb/fs/nfs/dir.c
> --- 2.4.x-xfs-linux/fs/nfs/dir.c Fri Aug 9 16:03:57 2002
> +++ 2.4.x-xfs-linux-kdb/fs/nfs/dir.c Wed Aug 28 16:54:44 2002
> @@ -741,7 +741,7 @@ static int nfs_sillyrename(struct inode
> static unsigned int sillycounter;
> const int i_inosize = sizeof(dir->i_ino)*2;
> const int countersize = sizeof(sillycounter)*2;
> - const int slen = strlen(".nfs") + i_inosize + countersize;
> + const int slen = sizeof(".nfs")-1 + i_inosize + countersize;
> char silly[slen+1];
> struct qstr qsilly;
> struct dentry *sdentry;
--
Daniel