[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <nb5g34ehva6wmjusa3tin3wbsr26gm6shvuxfspzkwpor6edxk@ncx2um24ipwq>
Date: Wed, 19 Mar 2025 17:11:25 +0100
From: Jan Kara <jack@...e.cz>
To: Mateusz Guzik <mjguzik@...il.com>
Cc: brauner@...nel.org, viro@...iv.linux.org.uk, jack@...e.cz,
linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org
Subject: Re: [PATCH] fs: load the ->i_sb pointer once in
inode_sb_list_{add,del}
On Wed 19-03-25 01:46:35, Mateusz Guzik wrote:
> While this may sound like a pedantic clean up, it does in fact impact
> code generation -- the patched add routine is slightly smaller.
>
> Signed-off-by: Mateusz Guzik <mjguzik@...il.com>
I'm surprised it matters for the compiler but as Christian wrote, why not.
Feel free to add:
Reviewed-by: Jan Kara <jack@...e.cz>
Honza
> ---
>
> Below is disasm before/after. I did not want to pull this into the
> commit message because of the total length vs long term usefulness ratio.
>
> can be moved up into the commit message no problem if someone insists on
> it:
>
> (gdb) disassemble inode_sb_list_add
> before:
> <+0>: endbr64
> <+4>: call 0xffffffff8130e9b0 <__fentry__>
> <+9>: push %rbx
> <+10>: mov 0x28(%rdi),%rax
> <+14>: mov %rdi,%rbx
> <+17>: lea 0x540(%rax),%rdi
> <+24>: call 0xffffffff8225cf20 <_raw_spin_lock>
> <+29>: mov 0x28(%rbx),%rax
> <+33>: lea 0x110(%rbx),%rdx
> <+40>: mov 0x548(%rax),%rcx
> <+47>: mov %rdx,0x8(%rcx)
> <+51>: mov %rcx,0x110(%rbx)
> <+58>: lea 0x548(%rax),%rcx
> <+65>: mov %rcx,0x118(%rbx)
> <+72>: mov %rdx,0x548(%rax)
> <+79>: mov 0x28(%rbx),%rdi
> <+83>: pop %rbx
> <+84>: add $0x540,%rdi
> <+91>: jmp 0xffffffff8225d020 <_raw_spin_unlock>
>
> after:
> <+0>: endbr64
> <+4>: call 0xffffffff8130e9b0 <__fentry__>
> <+9>: push %r12
> <+11>: push %rbp
> <+12>: push %rbx
> <+13>: mov 0x28(%rdi),%rbp
> <+17>: mov %rdi,%rbx
> <+20>: lea 0x540(%rbp),%r12
> <+27>: mov %r12,%rdi
> <+30>: call 0xffffffff8225cf20 <_raw_spin_lock>
> <+35>: mov 0x548(%rbp),%rdx
> <+42>: lea 0x110(%rbx),%rax
> <+49>: mov %r12,%rdi
> <+52>: mov %rax,0x8(%rdx)
> <+56>: mov %rdx,0x110(%rbx)
> <+63>: lea 0x548(%rbp),%rdx
> <+70>: mov %rdx,0x118(%rbx)
> <+77>: mov %rax,0x548(%rbp)
> <+84>: pop %rbx
> <+85>: pop %rbp
> <+86>: pop %r12
> <+88>: jmp 0xffffffff8225d020 <_raw_spin_unlock>
>
> fs/inode.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/fs/inode.c b/fs/inode.c
> index 10121fc7b87e..e188bb1eb07a 100644
> --- a/fs/inode.c
> +++ b/fs/inode.c
> @@ -623,18 +623,22 @@ static void inode_wait_for_lru_isolating(struct inode *inode)
> */
> void inode_sb_list_add(struct inode *inode)
> {
> - spin_lock(&inode->i_sb->s_inode_list_lock);
> - list_add(&inode->i_sb_list, &inode->i_sb->s_inodes);
> - spin_unlock(&inode->i_sb->s_inode_list_lock);
> + struct super_block *sb = inode->i_sb;
> +
> + spin_lock(&sb->s_inode_list_lock);
> + list_add(&inode->i_sb_list, &sb->s_inodes);
> + spin_unlock(&sb->s_inode_list_lock);
> }
> EXPORT_SYMBOL_GPL(inode_sb_list_add);
>
> static inline void inode_sb_list_del(struct inode *inode)
> {
> + struct super_block *sb = inode->i_sb;
> +
> if (!list_empty(&inode->i_sb_list)) {
> - spin_lock(&inode->i_sb->s_inode_list_lock);
> + spin_lock(&sb->s_inode_list_lock);
> list_del_init(&inode->i_sb_list);
> - spin_unlock(&inode->i_sb->s_inode_list_lock);
> + spin_unlock(&sb->s_inode_list_lock);
> }
> }
>
> --
> 2.43.0
>
--
Jan Kara <jack@...e.com>
SUSE Labs, CR
Powered by blists - more mailing lists