Whamcloud - gitweb
LU-16821 llite: report 1MiB directory blocksize 60/50960/4
authorAndreas Dilger <adilger@dilger.ca>
Thu, 11 May 2023 17:49:52 +0000 (11:49 -0600)
committerOleg Drokin <green@whamcloud.com>
Thu, 31 Aug 2023 06:30:33 +0000 (06:30 +0000)
Report st_blksize=1048576 for directories so that glibc readdir()
will allocate a larger buffer to match the MDS_READDIR size
and reduce the number of syscalls for large dirs.

Signed-off-by: Andreas Dilger <adilger@dilger.ca>
Change-Id: If64057c20ecc35194c319d2a88c3036f12c41ed5
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/50960
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
lustre/llite/file.c

index bf8192a..92ba94b 100644 (file)
@@ -5578,8 +5578,11 @@ fill_attr:
        if (sbi->ll_stat_blksize)
                stat->blksize = sbi->ll_stat_blksize;
        else if (S_ISREG(inode->i_mode))
-               stat->blksize = 1 << min(PTLRPC_MAX_BRW_BITS + 1,
-                                        LL_MAX_BLKSIZE_BITS);
+               stat->blksize = min(PTLRPC_MAX_BRW_SIZE,
+                                   1U << LL_MAX_BLKSIZE_BITS);
+       else if (S_ISDIR(inode->i_mode))
+               stat->blksize = min(MD_MAX_BRW_SIZE,
+                                   1U << LL_MAX_BLKSIZE_BITS);
        else
                stat->blksize = 1 << inode->i_sb->s_blocksize_bits;