Skip to content

Commit c9a3019

Browse files
intelmyAl Viro
authored andcommitted
fs/file.c: conditionally clear full_fds
64 bits in open_fds are mapped to a common bit in full_fds_bits. It is very likely that a bit in full_fds_bits has been cleared before in __clear_open_fds()'s operation. Check the clear bit in full_fds_bits before clearing to avoid unnecessary write and cache bouncing. See commit fc90888 ("vfs: conditionally clear close-on-exec flag") for a similar optimization. take stock kernel with patch 1 as baseline, it improves pts/blogbench-1.1.0 read for 13%, and write for 5% on Intel ICX 160 cores configuration with v6.10-rc7. Reviewed-by: Jan Kara <[email protected]> Reviewed-by: Tim Chen <[email protected]> Signed-off-by: Yu Ma <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Christian Brauner <[email protected]> Signed-off-by: Al Viro <[email protected]>
1 parent 52732bb commit c9a3019

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

fs/file.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,9 @@ static inline void __set_open_fd(unsigned int fd, struct fdtable *fdt)
264264
static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt)
265265
{
266266
__clear_bit(fd, fdt->open_fds);
267-
__clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits);
267+
fd /= BITS_PER_LONG;
268+
if (test_bit(fd, fdt->full_fds_bits))
269+
__clear_bit(fd, fdt->full_fds_bits);
268270
}
269271

270272
static inline bool fd_is_open(unsigned int fd, const struct fdtable *fdt)

0 commit comments

Comments
 (0)